Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: tragger am März 03, 2013, 13:38:15

Titel: Problem dynamischer Array Index außerhalb gültiger Bereich
Beitrag von: tragger am März 03, 2013, 13:38:15
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 Sub


Nun 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?
Titel: Re: Problem dynamischer Array Index außerhalb gültiger Bereich
Beitrag von: database am März 03, 2013, 14:15:09
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
Titel: Re: Problem dynamischer Array Index außerhalb gültiger Bereich
Beitrag von: tragger am März 03, 2013, 20:33:44
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.
Titel: Re: Problem dynamischer Array Index außerhalb gültiger Bereich
Beitrag von: database am März 03, 2013, 20:40:59
Hallo,

weil ReDim Preserve die bereits erfassten Werte bei der Array-Vergrößerung beibehält.

LG