VBA Array Abfrage: Prüfen, ob ein Array existiert
Schritt-für-Schritt-Anleitung
Um in VBA zu prüfen, ob ein Array bereits existiert oder leer ist, kannst Du folgende Schritte ausführen:
-
Deklaration des Arrays: Beginne mit der Deklaration des Arrays. Du kannst es als Public Myarr()
deklarieren.
Public Myarr() As String
-
Überprüfung, ob das Array leer ist: Eine gängige Methode ist die Verwendung von On Error Resume Next
, um einen Fehler abzufangen, wenn das Array nicht dimensioniert ist.
On Error Resume Next
lResult = UBound(Myarr)
If Err.Number <> 0 Then
MsgBox "Das Array ist nicht dimensioniert."
Else
MsgBox "Das Array ist dimensioniert."
End If
On Error GoTo 0
-
Initialisierung des Arrays: Wenn Du das Array mit Werten füllen möchtest, kannst Du dies mit ReDim
tun.
ReDim Myarr(1 To 10)
-
Prüfen auf Werte im Array: Um zu prüfen, ob ein bestimmter Wert im Array vorhanden ist, kannst Du eine Schleife verwenden.
Dim valueToCheck As String
valueToCheck = "DeinWert"
Dim exists As Boolean
exists = False
For i = LBound(Myarr) To UBound(Myarr)
If Myarr(i) = valueToCheck Then
exists = True
Exit For
End If
Next i
If exists Then
MsgBox "Wert ist im Array vorhanden."
Else
MsgBox "Wert ist nicht im Array vorhanden."
End If
Häufige Fehler und Lösungen
-
Fehler: UBound
gibt einen Fehler zurück: Dies geschieht, weil das Array nicht dimensioniert ist. Verwende On Error Resume Next
, um diesen Fehler abzufangen.
-
Fehler: IsEmpty
gibt False
zurück: Dies kann passieren, wenn das Array global deklariert wurde und bei einem vorherigen Lauf bereits Werte hatte. Stelle sicher, dass Du die Variablen zurücksetzt.
Alternative Methoden
-
Verwendung von Variant: Du kannst das Array als Variant deklarieren und dann mit IsEmpty
prüfen.
Public Myarr As Variant
If IsEmpty(Myarr) Then
MsgBox "Das Array ist leer."
End If
-
API-Funktion: Eine weitere Möglichkeit besteht darin, die API-Funktion SafeArrayGetDim
zu verwenden, um die Dimension des Arrays abzufragen.
Praktische Beispiele
Hier ist ein einfaches Beispiel, um die Funktionsweise zu demonstrieren:
Public Myarr() As String
Sub TestArray()
' Prüfen, ob das Array dimensioniert ist
On Error Resume Next
If UBound(Myarr) < LBound(Myarr) Then
MsgBox "Array ist leer oder nicht dimensioniert."
Else
MsgBox "Array ist dimensioniert."
End If
On Error GoTo 0
' Dimensionierung des Arrays
ReDim Myarr(1 To 5)
Myarr(1) = "Wert1"
Myarr(2) = "Wert2"
' Prüfen auf Werte im Array
If IsArray(Myarr) Then
MsgBox "Array hat Werte."
End If
End Sub
Tipps für Profis
- Verwende
Option Explicit
: Dies hilft, Tippfehler bei Variablen zu vermeiden und die Codequalität zu verbessern.
- Initialisiere Arrays immer: Vermeide Fehler, indem Du alle Arrays vor der Verwendung initialisierst.
- Nutze
Debug.Print
: Verwende diese Funktion, um Werte während der Entwicklung zu überprüfen, ohne Dialogfenster zu verwenden.
FAQ: Häufige Fragen
1. Wie kann ich prüfen, ob ein Array leer ist?
Verwende On Error Resume Next
in Kombination mit UBound
, um festzustellen, ob das Array dimensioniert ist.
2. Was ist der Unterschied zwischen IsEmpty
und UBound
?
IsEmpty
prüft, ob eine Variable einen Wert hat, während UBound
die obere Grenze eines Arrays zurückgibt und einen Fehler auslöst, wenn das Array nicht dimensioniert ist.
3. Wie kann ich sicherstellen, dass mein Array immer einen Standardwert hat?
Du kannst das Array mit ReDim
initialisieren und ihm Standardwerte zuweisen, um sicherzustellen, dass es nicht leer bleibt.