Tach zusammen,
mich ärgern die Arrays unter Excel-VBA. Dabei habe ich doch nur eine einfache Anforderung.
Ich möchte ein Array mit Strings füllen in der Art von
For i = 1 To Länge
MeinArray(i) = Range(„A“ & CStr(i)).Value
Next i
wobei in Spalte A diverse Strings enthalten sind.
O.a. Beispiel funktioniert natürlich nicht, und mich würde interessieren, warum nicht und wie kann man das realisieren?
Anm.: per Dim MeinArray(10) As String möchte ich natürlich erst einmal nicht vorgehen, weil ich vorerst nicht weiß, wie groß Länge ist, sprich den Wert erst später auslese. Ausserdem geht
iLänge = GetLänge()
Dim MeinArray(iLänge) As String nicht, VBA möchte einen konstanten Wert und keine Variable.
Das Array muss auf jeden Fall am Anfang definiert werden, sonst kann VBA ja nicht wissen, was MeinArray sein soll!
Du musst also vorher feststellen, wie groß das Array sein soll. Dann kann man es durchaus mit einer Variablen definieren, also z. B. dim MeinArray(Laenge)
Das hab ich gerade ausprobiert, zumindest Excel 97 lässt das zu.
Die Frage ist, was deine Funktion GetLänge() zurückliefert - es muss natürlich ein nummerischer Wert sein.
Außerdem würde ich grundsätzlich empfehlen, in Variablennamen keine Umlaute oder sonstigen Sonderzeichen zu verwenden (also Laenge statt Länge) - auch wenn VBA anscheinend keine Probleme damit hat - solange es sich in einer deutschsprachigen Version befindet …
Mahlzeit
Roland
For i = 1 To Länge
MeinArray(i) = Range(„A“ & CStr(i)).Value
Next i
wobei in Spalte A diverse Strings enthalten sind.
O.a. Beispiel funktioniert natürlich nicht, und mich würde
interessieren, warum nicht und wie kann man das realisieren?
Anm.: per Dim MeinArray(10) As String möchte ich natürlich
erst einmal nicht vorgehen, weil ich vorerst nicht weiß, wie
groß Länge ist, sprich den Wert erst später auslese. Ausserdem
geht
iLänge = GetLänge()
Dim MeinArray(iLänge) As String nicht, VBA möchte einen
konstanten Wert und keine Variable.
Das Array muss auf jeden Fall am Anfang definiert werden,
sonst kann VBA ja nicht wissen, was MeinArray sein soll!
Du musst also vorher feststellen, wie groß das Array sein
soll. Dann kann man es durchaus mit einer Variablen
definieren, also z. B. dim MeinArray(Laenge)
Das hab ich gerade ausprobiert, zumindest Excel 97 lässt das
zu.
Excel 2000 schimpft: „Fehler beim Kompilieren: Konstanter Ausdruck erforderlich“ und markiert mein iLastRow in der Dim-Deklarierung, s.u.
Die Frage ist, was deine Funktion GetLänge() zurückliefert -
es muss natürlich ein nummerischer Wert sein.
Ein Integer natürlich.
Mahlzeit
Roland
Hier mal der Testcode, wie ich ihn erfolglos probiere:
Sub ArrayTest()
Dim aArray As Variant, iLastRow As Integer
iLastRow = LastRow()
’ Hier knallt’s, s.o.:
Dim aTest(iLastRow) As String
’ Selbst, wenn ich nur Dim aTest(iLastRow) schreibe, weigert sich VBA zu kompilieren.
For i = 1 To iLastRow
aTest(i) = Cells(CStr(i), „A“).Value
Next i
For i = 1 To iLastRow
MsgBox (aArray(i))
Next i
End Sub
Function LastRow() As Integer
LastRow = Range(„A“ & CStr(Rows.Count)).End(xlUp).Row 'Letzte Zeile in Spalte A bestimmen
End Function
In diesem Fall muss das Array nicht mit dem Befehl dim , sondern mit ReDim definiert werden, damit eine variable Größe angegeben werden kann!
In der 2. Schleife solltest du übrigens aTest ausgeben und nicht aArray, wenn du es schon vorher so befüllst …
MfG
Roland
Excel 2000 schimpft: „Fehler beim Kompilieren: Konstanter
Ausdruck erforderlich“ und markiert mein iLastRow in der
Dim-Deklarierung, s.u.
Sub ArrayTest()
Dim aArray As Variant, iLastRow As Integer
iLastRow = LastRow()
’ Hier knallt’s, s.o.:
Dim aTest(iLastRow) As String
’ Selbst, wenn ich nur Dim aTest(iLastRow) schreibe, weigert
sich VBA zu kompilieren.
For i = 1 To iLastRow
aTest(i) = Cells(CStr(i), „A“).Value
Next i
For i = 1 To iLastRow
MsgBox (aArray(i))
Next i
End Sub
Function LastRow() As Integer
LastRow = Range(„A“ & CStr(Rows.Count)).End(xlUp).Row
'Letzte Zeile in Spalte A bestimmen
End Function