# Pyramide konstruieren



## killercoolaid (15. März 2006)

Hallo zusammen,
jetzt habe ich (noch) ein Problem:

Ich möchte in VBA eine Pyramide programmieren.
Sie soll mit dem Befehl debug.print ausgegeben werden in der Form:
AAABAAA
AABBBAA
ABBBBBA

Mit unten geschriebenen Code bekomme ich zwar das A und das zählt auch schön hoch.
Das B allerdings bekomme ich nicht hin.

```
varA = "A"
varB = "B"
For k = 1 To 3
    Debug.Print varB + varA
    varA = varA + "AA"
    varB = ?
Next k
```
Ich habe zuerst gedacht, dass ich varB = varB - "B" sagen kann, aber das ist offensichtlich falsch.
Weiß jemand von Euch vielleicht eine Lösung, wie ich in der Schleife das B runterzählen kann?
momentan sehe ich nur:
A
AAA
AAAAA
wenn ich das Prog laufen lasse.

Mfg killercoolaid


----------



## MeinerEiner_80 (15. März 2006)

Hi,
kenne mich zwar mit Visual Basic nicht so aus, daher könnten da nun ein paar Syntax-Fehler drin sein, aber generell würde ich es so machen:

```
varA = "AAA"
varB = "B"
for k= 1 to 3
     Debug.Print varA + varB + VarA
     var B = varB +"BB"
     varA = varA.substring(0,varA.Length-1)
next k
```

*grüssle*
MeinerEiner


----------



## DrSoong (15. März 2006)

So mal als kleiner Beispielcode:

```
Private Sub Command1_Click()
 Dim cRows As Integer, cCols As Integer, tText As String
 'Hier leg ich die Zeilen und Spalten fest, du kannst die natürlich auch über Textboxen eingeben lassen
 cRows = 3
 cCols = 7
 For cnt = 1 To cRows
  tText = ""
  tText = tText & getChars("A", Int((cCols - (cnt - 1) * 2) / 2))
  tText = tText & getChars("B", Int((cnt - 1) * 2 + 1))
  tText = tText & getChars("A", Int((cCols - (cnt - 1) * 2) / 2))
  Me.Print tText
 Next cnt
End Sub
Private Function getChars(ByVal cChar As String, ByVal cAnzahl As Integer) As String
 cChar = Left(cChar, 1)
 getChars = Replace(Space(cAnzahl), Chr(32), cChar)
End Function
```
Hab mir eine kleine Funktion dazu geschrieben, die mir einen String mit einem beliebigen (durch den Aufruf festgelegten) Buchstaben in einer beliebigen (beim Aufruf festgelegten) Länge zurückgibt.


Der Doc!


----------



## killercoolaid (15. März 2006)

Danke für die Antworten.
Es klappt wie am Schnürchen.
Sorry, dass ich mich erst jetzt melde, musste noch in eine Besprechung.

mfg killercoolaid


----------



## Shakie (15. März 2006)

Eine Alternative wäre die Verwendung der String-Funktion. Mit der kannst du eine bestimmte Anzahl an gleichen Zeichen hintereinander erstellen.
Hier ein Beispiel:

```
Dim intA As Integer
Dim strB As String
Const Pyramidenbreite As Integer = 7

For intA = 1 To Pyramidenbreite Step 2
    strB = VBA.String$((Pyramidenbreite - intA) / 2, "B")
    Debug.Print strB & VBA.String$(intA, "A") & strB
Next
```


----------

