Hallo
erst mal schön, daß es geholfen hat.
Noch eine Anmerkung und eine Korrektur.
**Sub test()
Dim blätter As Variant
blätter = Array()
ReDim blätter(ActiveWorkbook.sheets.Count)
For i = 0 To ActiveWorkbook.sheets.Count - 1
blätter(i) = ActiveWorkbook.sheets(i + 1).Name
Debug.Print blätter(i)
Next i
End Sub**
Die Zeile:
blätter = Array()
bewirkt nichts. Die kann den Fehler verursachen.
Eine Variable, die Variant deklariert ist kann man durch das passende Redim zum Array machen. (So wie Du es geschrieben hast.) Dadurch wird Deine Variable zum Array, nicht durch die Zeile:
blätter = Array()
Wie du wohl angenommen hast.
Übersichtlicher ist es aber, das Array als solches zu deklarieren.
Hinter Next muss keine Variable stehen.
Dann sieht der Code so aus:
Sub test()
Dim blätter() As Variant
ReDim blätter(ActiveWorkbook.sheets.Count)
For i = 0 To ActiveWorkbook.sheets.Count - 1
blätter(i) = ActiveWorkbook.sheets(i + 1).Name
Debug.Print blätter(i)
Next
End Sub
Bis hier her sollte jetzt alles klar sein?
Nun noch mal zu Option Base.
Mit Base 1 legst Du fest, daß alle Arrays, die so deklariert werden, wie Du es getan hast mit dem Index 1 beginnen.
Dann gibt es kein …
blätter(0)
Mit Deinem
For i = 0 …
blätter(i)
rufst Du alle Blätter mit dem Index auf der in i stegt. Deine Schleife beginnt bei Null (For i = 0 …)
Das erste Feld, auf das Du zugreifst ist also:
blätter(0)
Wenn Du mit …
Option Base 1
… festlegst, daß es dieses Feld im Array nicht geben soll, kann das nur zu einem Fehler führen.
Du legst erst fest, dieses Feld gibt es nicht und dann greifst Du darauf zu.
Wenn Du unbedingst Option Base 1 schreiben willst, dann muss Deine Schleife auch bei 1 beginnen:
For i = 1 …
Gruß Chewpapa