Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array auf Inhalt prüfen

Array auf Inhalt prüfen
23.04.2021 17:08:04
NW
Hallo Leute,
ich verzweifele an den Arrays in VBA :-(
Ich habe ein temporäres Array, was ich nach jedem Durchgang löschen möchte und jedesmal frage, ob es voll oder leer ist.
Dafür habe ich hier im Forum die IsEmpty-Methode gefunden.
Die gibt mir aber auch nach Löschen des Arrays voll aus, obwohl der array leer ist.
Könnt ihr mir bitte helfen ? Danke

Sub test()
Dim Sig() As String
ReDim Sig(1 To 10)
If IsEmpty(Sig) Then
test = "leer"
Else
test = "voll"
End If
Erase Sig
If IsEmpty(Sig) Then
test = "leer"
Else
test = "voll"
End If
End Sub
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 17:10:10
Hajo_Zi
mit
ReDim Sig(1 To 10)
wird es doch beim nächsten Start gelöscht.
GrußformelHomepage
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 17:12:13
NW
Ich verstehe nicht genau, was du meinst ?!
Die zweite If-Abfrage sollte "leer" ergeben, aber sie ergibt "voll", obwohl der Array leer ist durch Erase
AW: Array auf Inhalt prüfen
23.04.2021 17:20:02
Nepumuk
Hallo,
teste mal:

If Trim$(Join$(Sig)) = vbNullString Then
MsgBox "leer"
Else
MsgBox "voll"
End If
Gruß
Nepumuk
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 17:29:19
NW
Funktioniert leider auch nicht. Jetzt spuckt er mir die ganze Zeit leer aus :-(
Sobald da Werte in dem String stehen, bringt er einen Fehler "Typen unverträglich"
AW: Array auf Inhalt prüfen
23.04.2021 17:32:58
Nepumuk
Hallo,
kann ich nicht nachvollziehen:

Sub test()
Dim Sig() As String
ReDim Sig(1 To 10)
Sig(5) = "123"
If Join$(Sig, vbNullString) = vbNullString Then
MsgBox "leer"
Else
MsgBox "voll"
End If
End Sub
Gruß
Nepumuk
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 17:28:43
Nepumuk
Hallo,
noch einfacher:

If Join$(Sig, vbNullString) = vbNullString Then
Gruß
Nepumuk
AW: Array auf Inhalt prüfen
23.04.2021 17:36:35
onur
Ein Array ist nicht mehr leer, wen du es dimensioniert hast, aber die Elemente schon. Versuch es so:

If IsEmpty(Sig(UBound(Sig))) Then test = "leer"

Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 17:51:18
NW
Danke, aber da habe ich das gleiche Problem, wie beim Nepumuk - Typen unverträglich
Versteh ich selbst nicht. Es ist ein normales array mit string werten drin, mehr nicht
AW: Array auf Inhalt prüfen
23.04.2021 17:57:44
onur
Zum Leeren darfst du auch nicht Erase nehmen, sondern nur (z.B):
Redim Sig(1 to 10)
AW: Array auf Inhalt prüfen
23.04.2021 18:03:51
NW
Interessanter Punkt - gleich ausprobiert, aber funktioniert auch nicht.
Ich lass mir die Werte immer im Überwachungsfenster anzeigen :-)
Zuerst hat Sig 4 Elemente mit Strings drin
Nach Erase hat es nix mehr
IsEmpty gibt trotzdem False zurück
Wenn ich ReDim nehme mit Sig(0) hat es immernoch ein Element drin, was leer ist
IsEmpty ist trotzdem False
Das kann doch überhaupt nicht sein .......
Ich zweifele langsam an einem Verstand
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 18:07:39
onur
Das Problem ist, das du das Array als String deklarierst - Nimm Variant.
Bei String haben alle Elemente automatisch den Wert "", was NICHT leer bedeutet.
AW: Array auf Inhalt prüfen
23.04.2021 18:18:22
NW
Danke für den Tipp, aber das hatte ich bereits getestet, da ich in einem anderen Thread gelesen habe, dass Variant nie leer sind.
Deswegen habe ich es auf String geändert
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 18:27:57
NW
Ist wohl ein bekanntes Problem und ich hab schon etliche Threads gesehen, aber keins sagt, wie ich es löse :-(
http://www.office-loesung.de/ftopic429612_0_0_asc.php
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 18:45:49
onur
Hast du dir denn meine Datei nicht angeguckt ?
AW: Array auf Inhalt prüfen
23.04.2021 18:50:33
Daniel
Hi
IsEmpty wird nur dann wahr, wenn du es auf eine reine Variantvariable anwendest, die noch nie dimensioniert oder der noch nie ein Wert zugewiesen wurde.
das funktioniert also nur für die allererste Prüfung nach dem Dim X.
vielleicht gehts ja so, dass du die Variable, um sie zu leeren einfach mit ReDim X(0) dimensionierst.
dann kannst du im Ubound(x) = 0 ermitteln, ob sie leer ist oder ob du Werte zugeweisen hast.
oder du lässt parallel eine boolsche Variable mitlaufen, die du auf True setzt, wenn du Werte ins Array schreibst und auf False, wenn du das Array leerst.
Dann fragst du diese Variable ab.
Gruß Daniel
Anzeige
AW: Array auf Inhalt prüfen
23.04.2021 19:08:27
NW
Danke für den Tipp.
Das funktioniert tatsächlich.
Vielen Dank- Endlich eine Lösung - ich war schon am verzweifeln :P
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Array auf Inhalt prüfen in VBA


Schritt-für-Schritt-Anleitung

Um zu prüfen, ob ein Array in VBA leer ist oder ob ein Wert darin vorhanden ist, kannst du die folgenden Schritte befolgen:

  1. Deklaration des Arrays:

    Dim Sig() As Variant
  2. Dimensionierung des Arrays:

    ReDim Sig(1 To 10)
  3. Prüfen, ob das Array leer ist: Um zu überprüfen, ob das Array leer ist, dimensioniere es erneut:

    ReDim Sig(0)
    If UBound(Sig) = 0 Then
       MsgBox "Array ist leer"
    End If
  4. Werte ins Array einfügen:

    Sig(1) = "Wert1"
  5. Wiederholt prüfen, ob der Wert vorhanden ist:

    If Not IsEmpty(Sig(1)) Then
       MsgBox "Wert ist im Array vorhanden"
    End If

Häufige Fehler und Lösungen

  • Fehler: Typen unverträglich
    Dieser Fehler tritt auf, wenn du versuchst, einen nicht kompatiblen Datentyp in das Array einzufügen. Stelle sicher, dass die Datentypen übereinstimmen.

  • Problem: IsEmpty gibt False zurück
    Wenn du ein Array mit Strings deklarierst, wird der Inhalt als leer betrachtet, auch wenn die Elemente den Wert "" haben. Verwende Variant, um dieses Problem zu umgehen.


Alternative Methoden

Hier sind einige alternative Ansätze, um zu prüfen, ob ein Array leer ist oder ob ein Wert darin vorhanden ist:

  1. Join-Funktion verwenden:

    If Join(Sig, vbNullString) = vbNullString Then
       MsgBox "Array ist leer"
    End If
  2. UBound-Funktion verwenden:

    If UBound(Sig) < 1 Then
       MsgBox "Array ist leer"
    End If
  3. Prüfen auf spezifische Werte:

    Dim i As Integer
    Dim WertVorhanden As Boolean
    WertVorhanden = False
    For i = LBound(Sig) To UBound(Sig)
       If Sig(i) = "Wert1" Then
           WertVorhanden = True
           Exit For
       End If
    Next i
    If WertVorhanden Then
       MsgBox "Wert ist vorhanden"
    End If

Praktische Beispiele

  1. Überprüfen, ob ein Array leer ist:

    Sub CheckArray()
       Dim Sig() As Variant
       ReDim Sig(1 To 10)
       If UBound(Sig) >= 1 Then
           MsgBox "Array hat Elemente"
       Else
           MsgBox "Array ist leer"
       End If
    End Sub
  2. Wert im Array prüfen:

    Sub CheckValueInArray()
       Dim Sig() As Variant
       ReDim Sig(1 To 10)
       Sig(1) = "Test"
       If Not IsEmpty(Sig(1)) Then
           MsgBox "Wert im Array vorhanden"
       End If
    End Sub

Tipps für Profis

  • Verwende Variant für die Deklaration von Arrays, wenn du mit unterschiedlichen Datentypen arbeitest.
  • Nutze die UBound und LBound Funktionen, um dynamisch die Grenzen deines Arrays zu bestimmen.
  • Halte deine Code-Struktur klar und vermeide unnötige Erase-Befehle, wenn du das Array einfach neu dimensionieren kannst.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob ein Wert in einem Array vorhanden ist?
Du kannst eine Schleife verwenden, um jedes Element im Array zu überprüfen. Alternativ kannst du die Join-Methode verwenden, um den Inhalt des Arrays zu einem String zu verbinden und diesen auf den gesuchten Wert zu durchsuchen.

2. Warum zeigt IsEmpty immer "False", auch wenn ich das Array gelöscht habe?
IsEmpty funktioniert nur bei Variablen, die noch nie dimensioniert oder initialisiert wurden. Bei Arrays, die bereits dimensioniert sind, wird IsEmpty nicht wie erwartet arbeiten. Verwende stattdessen UBound zur Überprüfung der Größe des Arrays.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige