VBA For-Next Schleife Access 2010

Hallo zusammen,

ich habe folgenden Code:

Private datei(0 To 2) As String

Private Sub msg\_Click()

Call WordDateien
For Each Item In datei
MsgBox (datei(i))
Next Item

End Sub

Sub WordDateien()

datei(0) = "test1"
datei(1) = "test2"
datei(2) = "test3"

End Sub

Jetzt kurz mein Problem:
Warum ist meine datei(i) immer „test1“ auch wenn (beim schrittweisen durchgehen) bei Item (mit der Maus darüberfahren) der nächste Eintrag angezeigt wird?

mfg MPunkt

Private Sub msg_Click()
Call WordDateien
For Each Item In datei
MsgBox (datei(i))
Next Item
End Sub

Warum ist meine datei(i) immer „test1“ auch wenn (beim
schrittweisen durchgehen) bei Item (mit der Maus
darüberfahren) der nächste Eintrag angezeigt wird?

Hallo MPunkt,

weil i immer 0 ist.

Private Sub msg\_Click()
Dim i
Call WordDateien
For i = LBound(datei) To UBound(datei)
 MsgBox datei(i)
Next i
End Sub

Gruß
Reinhard

Hallo,

Warum ist meine datei(i) immer „test1“ auch wenn (beim
schrittweisen durchgehen) bei Item (mit der Maus
darüberfahren) der nächste Eintrag angezeigt wird?

weil i mit Null initialisiert wird und nie geändert.
Füge in Deine Schleife mal ein:

i = i + 1

Anders wäre es bei For i = 0 to 2 …

Aber das hast Du nicht, Du hast

For each …

und da kommt kein i vor.

Erstaunt bin ich, daß Deine Schleife überhaupt läuft.
Das kann eigentlich nur gehen, wenn ‚Datei‘ nicht wie bei Dir ein Array ist, sondern ein Objekt, das eine Eigenschaft ‚Item‘ hat.

Wenn das Array später variabel größer werden soll, würde das bei mir etwa so aussehen:

Dim Datei() As String

Private Sub msg\_Click()
WordDateien

For i = LBound(Datei) To UBound(Datei)
 MsgBox Datei(i)
Next

End Sub

Private Sub WordDateien()
ReDim Datei(2)
Datei(0) = "test1"
Datei(1) = "test2"
Datei(2) = "test3"
End Sub

(VB6.0) Mit VBA kenne ich mich leider nicht so gut aus, was Du geschreiben hast war ja aber noch VB.

Gruß Rainer

Hallo,

Anmerkungen im Text.

Hallo zusammen,

ich habe folgenden Code:

Private datei(0 To 2) As String

Private Sub msg_Click()

Call WordDateien
For Each Item In datei

Iterationsvariable Item vom Typ String!

MsgBox (datei(i))

i = 0, keine explizite Initialisierung - daher immer datei(0)
Versuche mal stattdessen:
MsgBox (Item)

Next Item

End Sub

Sub WordDateien()

datei(0) = „test1“
datei(1) = „test2“
datei(2) = „test3“

End Sub

Jetzt kurz mein Problem:
Warum ist meine datei(i) immer „test1“ auch wenn (beim
schrittweisen durchgehen) bei Item (mit der Maus
darüberfahren) der nächste Eintrag angezeigt wird?

mfg MPunkt

Grüße
Thorsten

Danke an euch drei,

ich habs jetzt mit LBound und UBound gelöst.
Abgesehen von der Lösung hab ich durch eure Antworten die Schleifen-Funktion um einiges besser verstanden.

Also nochmals ein herzliches Dankeschön,
mfg MPunkt

Erstaunt bin ich, daß Deine Schleife überhaupt läuft.
Das kann eigentlich nur gehen, wenn ‚Datei‘ nicht wie bei Dir
ein Array ist, sondern ein Objekt, das eine Eigenschaft ‚Item‘
hat.

Hallo Rainer,

ich glaube MPunkt hat da das getan was man tunlichst unterlassen sollte.
Er hat einer Variablen den gleichen Namen von etwas gegeben was Vba auch kennt und auch du denkst bei Item logischerweise an etwas anderes.

Bei dieser Namensgebung
For Each myItem In datei
wärst du nicht irritiert gewesen.

Persönlich finde ich es inkonsequent von Vba, vielleicht auch Vb sowas durchgehen zu lassen.
Wie z.B. das da
Sub Stop()
das lehnt der Debugger (in Vba) völlig ab weil er „Stop“ als etwas anderes kennt.

Gruß
Reinhard

Hallo Reinhard,

For Each myItem In datei
wärst du nicht irritiert gewesen.

Doch. :smile: For Each kannte ich in dieser Verwendung nicht.
Dann hätte ich erwartet, daß Datei ein Objekt sein muss, das eine Eigenschaft ‚myItem‘ hat.

Deshalb habe ich mal etwas verrücktes getippt und erwartet, daß der Code nicht läuft.

Private Sub Command1\_Click()
 Dim arr(10) As Integer
 For i = 0 To 10
 arr(i) = i
 Next
 For Each i In arr
 MsgBox i
 Next
End Sub

Ich hab’ mich aber geirrt, VB arbeitet das tatsächlich ab.

Persönlich finde ich es inkonsequent von Vba, vielleicht auch
Vb sowas durchgehen zu lassen.
Wie z.B. das da
Sub Stop()
das lehnt der Debugger (in Vba) völlig ab weil er „Stop“ als
etwas anderes kennt.

Item ist ja nur eine Eigenschaft, kein Schlüsselwort. Das lässt VB durchgehen.

Gruß Rainer