Ich versuche gerade die die Daten aller Controls in einem Formular in einem Array zu speichern. Leider bin ich bei Arrays in VBA Neuling und mache irgendwetad falsch.
Hier der Code:
Private Sub Form_Current()
Dim myArray() As String
Dim ctl As control
Dim helfer As String
Dim I As Long
Dim nCount As Long
I = 0
For Each ctl In Me.Controls
If ctl.Tag = "Feldscanner" Then
'Deine Aktion
helfer = ctl.Name
myArray(I) = ctl.OldValue
I = I + 1
End If
Next ctl
For I = LBound(myArray) To UBound(myArray)
Debug.Print myArray(I)
Next
'nCount = (UBound(myArray) - LBound(myArray))
End SubNun kommt beim Anzeigen des Forms folgender Fehler:
ZitatLaufzeitfehler 9 Index außerhalb des gültigen Bereichs
Wo ist mein Fehler? Oder kann man ein dynamisches Array nicht wirklich erstellen und muss es doch dymensionieren mit einer vorgeschalteten Schleife zur Ermittlung der Felder?
Hallo,
Private Sub Form_Current()
Dim myArray() As String
Dim ctl As control
Dim helfer As String
Dim I As Long, x as Long
Dim nCount As Long
I = 0
For Each ctl In Me.Controls
If ctl.Tag = "Feldscanner" Then
'Deine Aktion
helfer = ctl.Name
ReDim Preserve myArray(I)
myArray(I) = ctl.OldValue
I = I + 1
End If
Next ctl
'For I = LBound(myArray) To UBound(myArray)
For x = 0 To I-1
'Debug.Print myArray(I)
Debug.Print myArray(x)
Next
'nCount = (UBound(myArray) - LBound(myArray))
End Sub
Wenn du ein dynamisches Array einsetzen willst, musst du es dementsprechend erweitern (ReDim-Anweisung).
Dein Fehler kam durch die Nicht-Erweiterung des Arrays zustande.
Für das Auslesen nimmst du dann die geänderte For-Schleife - For x = 0 To I-1 deswegen, weil I beim letzten Schleifendurchlauf
noch einmal erhöht wird ohne das zu benötigen.
Du kannst aber ntürlich auch ein wenig mit den
Array-Grenzen experimentieren, die jetzt auch stimmen sollten.
Was die Variable 'helfer' tun sollte ist mir aber dennoch nicht ganz klar, ihr Inhalt wird bei jedem Schleifendurchlauf einfach überschrieben.
HTH
Hallo,
vielen Dank, das wars.
Noch eine kurze erläuternde Frage: Warum nutze ich redim Preserve und nicht nur redim?
Ach übrigens das helfer stammt noch aus Testzwecken. Ich hatte vergessen es auszukommentieren oder gleich zu löschen.
Hallo,
weil ReDim Preserve die bereits erfassten Werte bei der Array-Vergrößerung beibehält.
LG