VBA-Syntax-Frage: Datenfeld auslesen

Hallo!

Es ist sicher ein ganz dummer Fehler, aber das hilft mir ja nicht.

Ich möchte die Werte einer Tabellenspalte in ein Datenfeld einlesen und von dort auslesen. Das klappt auch gut.

Wenn ich aber nach der Schleife das Datenfeld über den Index wieder auslesen möchte z.B. über die Anweisung MsgBox S(4), dann bekomme ist immer 0 als angeblichen Inhalt. In der Schleife klappt das mit
'MsgBox ("Inhalt Index " & og & " ist " & S(og)) einwandfrei.

Vielen Dank, Martin.

Hier also der Quellcode:

Sub einlesen_test()

Dim blatt As Object
Dim S() As Double 'Liste für Summen

Dim x As Integer 'Zählvariable
Dim og As Integer 'höchster Index der Liste

Set blatt = ThisWorkbook.Sheets(„Monatliche Ausgaben“)

x = 3 'ab Zeile 2 beginnt Zelldurchlauf
og = 0

Do
If blatt.Cells(x, 2).Value = Empty Then
Exit Do
End If

'MsgBox (blatt.Cells(x, 2).Value & " in Array einlesen")

ReDim S(1)
ReDim Preserve S(og + 1)
og = UBound(S)
S(og) = blatt.Cells(x, 2).Value

'MsgBox ("Inhalt Index " & og & " ist " & S(og))
x = x + 1
Loop
MsgBox „Daten für " & S(4) & " wurden aufgezeichnet.“
End Sub

Moin Martin,

habe meine Kommentare in deinen Quelltext gesetzt:

Hier also der Quellcode:

Sub einlesen_test()

Dim blatt As Object
Dim S() As Double 'Liste für Summen

Dim x As Integer 'Zählvariable
Dim og As Integer 'höchster Index der Liste

Set blatt = ThisWorkbook.Sheets(„Monatliche Ausgaben“)

x = 3 'ab Zeile 2 beginnt
Zelldurchlauf

nächste Zeile ist wichtig (für den Fehler)

og = 0

Do
If blatt.Cells(x, 2).Value = Empty Then
Exit Do
End If

'MsgBox (blatt.Cells(x, 2).Value & " in Array
einlesen")

ReDim S(1)

ACHTUNG og = 0 (siehe oben), damit
ReDim Preserve S (0 + 1)
hast du nur 2 Einträge zur Verfügung

ReDim Preserve S(og + 1)
og = UBound(S)
S(og) = blatt.Cells(x, 2).Value

og = 0, d.h. MsgBox Aufruf klappt (wie von dir beschrieben)

'MsgBox ("Inhalt Index " & og & " ist " & S(og))
x = x + 1
Loop

so, jetzt versuchst Du auf 5. Element zuzugreifen, dein
Array besteht aber nur aus 2 Elementen (0 + 1 = 1): S(0), S(1)
deshalb scheppert es wohl hier. Schreibe S(1) und alles ist gut!

MsgBox „Daten für " & S(4) & " wurden aufgezeichnet.“
End Sub

Cheers!
Hawky

Hi,

du hast eine REDIM-Anweisung in der Do-Loop-Schleife.

Wenn du Redim S(1) schreibst, wird mit jedem Lauf in der Schleife, das Array auf 1 zurückgesetzt und der Inhalt gelöscht.
Schreib das Redim vor dem Do und dann müsste es klappen.

greetz

Mario

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]