ReDim Preserve in VBA: Laufzeitfehler 9 und Lösungen
Schritt-für-Schritt-Anleitung
Um den Laufzeitfehler 9 beim Einsatz von ReDim Preserve
in VBA zu vermeiden, solltest du die Dimensionen deines Arrays korrekt handhaben. Hier ist eine Schritt-für-Schritt-Anleitung:
- Initialisiere das Array: Du kannst ein dynamisches Array mit
Dim myArray() As Variant
deklarieren.
- Verwende
ReDim Preserve
: Beachte, dass nur die letzte Dimension des Arrays mit ReDim Preserve
geändert werden kann. Beispiel:
ReDim Preserve myArray(1 To 5, 1 To i)
- Fülle das Array: In einer Schleife kannst du die Werte einfügen:
myArray(1, i) = Wert1
myArray(2, i) = Wert2
- Gib das Array aus: Am Ende kannst du das Array einer ListBox zuweisen, um die Daten anzuzeigen.
Häufige Fehler und Lösungen
Ein häufiger Fehler ist der Laufzeitfehler 9: "Index außerhalb des gültigen Bereichs". Hier sind einige Lösungen:
- Dimensionen korrekt anpassen: Stelle sicher, dass du nur die letzte Dimension des Arrays mit
ReDim Preserve
änderst. Versuche, die Anzahl der Zeilen und Spalten vorab zu definieren.
- Überprüfung der Indizes: Überprüfe, ob die Indizes, die du verwendest, innerhalb des gültigen Bereichs liegen.
- Initialisierung: Achte darauf, dass das Array vor der Verwendung mit
ReDim
initialisiert wird.
Alternative Methoden
Wenn du mehr Flexibilität benötigst, gibt es alternative Methoden, um Arrays in VBA zu handhaben:
- Verwende Collections: Statt Arrays kannst du auch Collections verwenden, die dynamisch wachsen können, ohne dass du
ReDim Preserve
benötigst.
- Verwendung von Dictionaries: Diese bieten eine einfache Möglichkeit, Daten zu speichern und schnell darauf zuzugreifen.
Hier ein einfaches Beispiel für die Verwendung einer Collection:
Dim myCollection As Collection
Set myCollection = New Collection
myCollection.Add "Wert1"
Praktische Beispiele
Hier ist ein praktisches Beispiel, das zeigt, wie du ein Array mit ReDim Preserve
füllst und es dann einer ListBox zuweist:
Sub Beispiel()
Dim myArray() As Variant
Dim i As Integer
i = 0
ReDim myArray(1 To 5, 1 To 1) ' initialisiere das Array
For j = 1 To 10
i = i + 1
ReDim Preserve myArray(1 To 5, 1 To i)
myArray(1, i) = "Beispiel" & j
myArray(2, i) = j
Next j
UserForm1.ListBox1.Column = myArray
End Sub
Tipps für Profis
FAQ: Häufige Fragen
1. Was ist der Hauptvorteil von ReDim Preserve
?
ReDim Preserve
ermöglicht es dir, die Größe eines Arrays zu ändern, während die vorhandenen Daten erhalten bleiben.
2. Warum erhalte ich immer wieder Laufzeitfehler 9?
Dieser Fehler tritt auf, wenn du versuchst, auf einen Index außerhalb des definierten Bereichs deines Arrays zuzugreifen. Überprüfe deine Indizes und stelle sicher, dass sie korrekt sind.
3. Gibt es eine Möglichkeit, die Spaltenüberschriften in einer ListBox anzuzeigen?
Ja, aber nur wenn du ein RowSource verwendest. Andernfalls könntest du manuell Labels verwenden oder die ListView-Steuerelemente nutzen, um Überschriften anzuzeigen.