Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Leeres Array

Leeres Array
Oliver
Hallo Profis,
ich werte Logfiles in bestimmten Archiven aus. Dabei verwende ich die Array-Funktion.
Leider sind die Archive auch manchmal leer und damit auch das Array.
sPath = Worksheets("Menue").Cells(FirstToolRow + Tool, 16) '"W:\log"
sPattern = Suchmuster$ '"*EventLog*.log"
arr = arrAll(sPath, sPattern)
'*** in der nächsten Zeile führt das "leere" Array zum Laufzeitfehler=9 ********
For iCounter = 1 To UBound(arr)
Cells(iCounter + 1, 2) = sPath & arr(iCounter)
Gibt es eine "saubere" Lösung, mit der man abfragen kann, ob ein Array leer ist?
If arr0 oder If arr="" funktionieren nicht! Schlimmstenfalls schicke ich den Laufzeitfehler mit on error... ins Nirvana.
Hat jemand vielleicht eine bessere Lösung?
Liebe Grüsse vom wilden Olli;-)
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Leeres Array
07.02.2011 19:25:38
ransi
HAllo
Versuch mal sowas:
for each ding in arr
iCounter = icounter+1
Cells(iCounter + 1, 2) = sPath & ding
next
Wenn das nicht geht, ich hab noch was mit API...
ransi
Leeres Array
07.02.2011 20:50:24
Anton
Hallo Olli,
so?:
If IsArray(arr) Then
For iCounter = 1 To UBound(arr)
'usw
End If
mfg Anton
Anzeige
AW: Leeres Array
08.02.2011 03:05:21
Peter
Hallo Olli
versuche mal
Dim Array_leer
If arr=Array_leer then msgbox "Leer"
Wenn du eine Variable deklarierst und ihr keinen Wert zuweist
ist sie wie dein Array leer
ciao Peter
AW: Leeres Array
08.02.2011 10:04:18
Tino
Hallo,
kommt darauf an wie arr Deklariert ist.
Ist diese vom Typ Variant und bekommt erst von der Funktion arrAll ein Array übergeben,
wobei die Funktion nur eine Array übergibt wenn was gefunden wurde, kann man es so lösen.
Dim arr
IF IsArray(arr) then
Ist arr bereits als Array Deklariert, kannst Du es mit einer Api Funktion lösen.
Private Declare Sub GetSafeArrayPointer Lib "msvbvm60.dll" Alias "GetMem4" _
(pArray() As Any, sfaPtr As Long)
Sub Beispiel()
Dim arr(), sfaPtr As Long
GetSafeArrayPointer arr, sfaPtr
If sfaPtr > 0 Then
MsgBox "Array ist initialisiert"
Else
MsgBox "Array ist nicht initialisiert"
End If
End Sub
Gruß Tino
Anzeige
AW: Leeres Array
08.02.2011 14:27:38
Oliver
Hallo Tino, hallo Leute,
Deine Lösung war zwar die letzte im Forum, aber auch die Einzige, die auf Anhieb funktioniert hat.
Trotdem Dank an alle!
der Code sieht jetzt so aus:
PrivateDeclareSubGetSafeArrayPointer Lib "msvbvm60.dll" Alias "GetMem4" (pArray() As Any, sfaPtr As Long)
Sub Mapping_Logfiles()
Dim arr(), sfaPtr As Long
Dim..... bla bla bla
Range("A2:I65536").Select
Selection.ClearContents
Range("A2").Select
sPath = Worksheets("Menue").Cells(FirstToolRow + Tool, 16) '"W:\log"
sPattern = Suchmuster$ '"*EventLog*.log"
arr = arrAll(sPath, sPattern)
GetSafeArrayPointer arr, sfaPtr
If sfaPtr > 0 Then
'***MsgBox "Array ist initialisiert"
For iCounter = 1 To UBound(arr)
Cells(iCounter + 1, 2) = sPath & arr(iCounter)
'***Pseudo_Hyperlink_erstellen()
Cells(iCounter + 1, 2).Select
Selection.Font.ColorIndex = 5
Selection.Font.Underline = xlUnderlineStyleSingle
test$ = sPath & arr(iCounter)
ActiveWindow.ScrollRow = iCounter 'nach oben scrollen
Next iCounter
Else
'***MsgBox "Array ist nicht initialisiert"
End If
End Sub
()
Tausend Dank!
Vom wilden Olli
Anzeige
AW: Leeres Array
09.02.2011 04:27:52
peter
ich dachte so
Sub arreay_test()
Dim test_array(1 To 8)
Dim test_array_leer
Dim array_zähler As Byte
test_array(1) = "mo"
test_array(2) = "di"
test_array(3) = "mi"
test_array(4) = "do"
test_array(5) = "fr"
array_zähler = 1
Do While array_zähler 

ciao Peter
Anzeige
;
Anzeige

Infobox / Tutorial

Leeres Array in VBA überprüfen


Schritt-für-Schritt-Anleitung

Um in VBA zu prüfen, ob ein Array leer ist, kannst Du die folgenden Schritte durchführen:

  1. Array deklarieren: Stelle sicher, dass Dein Array korrekt deklariert ist. Du kannst ein leeres Array so erstellen:

    Dim arr() As Variant
  2. Array initialisieren: Verwende eine Funktion, die das Array befüllt. Wenn das Array leer ist, wird es nicht initialisiert.

    arr = arrAll(sPath, sPattern)
  3. Überprüfen, ob das Array leer ist: Nutze die IsArray-Funktion zusammen mit UBound, um festzustellen, ob das Array initialisiert wurde. Ein Beispiel:

    If IsArray(arr) Then
        If UBound(arr) >= 0 Then
            ' Array ist nicht leer
        Else
            ' Array ist leer
        End If
    Else
        ' arr ist kein Array
    End If

Häufige Fehler und Lösungen

Ein häufiger Fehler ist der Laufzeitfehler 9, der auftritt, wenn Du versuchst, auf ein nicht existierendes Element eines leeren Arrays zuzugreifen. Um diesen Fehler zu vermeiden, solltest Du immer überprüfen, ob das Array leer ist, bevor Du darauf zugreifst. Hier sind einige Lösungen:

  • Fehler bei UBound: Wenn UBound(arr) einen Fehler wirft, kann das auf ein leeres Array hinweisen. Setze vorher die IsArray-Prüfung ein.

  • Überprüfung auf leere Arrays: Verwende die Technik aus der Schritt-für-Schritt-Anleitung, um sicherzustellen, dass das Array initialisiert ist.


Alternative Methoden

Eine alternative Methode zur Überprüfung, ob ein Array leer ist, umfasst die Verwendung einer API-Funktion. Hier ist ein Beispiel, wie Du die GetSafeArrayPointer-Funktion verwenden kannst:

Private Declare Sub GetSafeArrayPointer Lib "msvbvm60.dll" Alias "GetMem4" (pArray() As Any, sfaPtr As Long)

Sub Beispiel()
    Dim arr() As Variant
    Dim sfaPtr As Long
    GetSafeArrayPointer arr, sfaPtr
    If sfaPtr > 0 Then
        MsgBox "Array ist initialisiert"
    Else
        MsgBox "Array ist nicht initialisiert"
    End If
End Sub

Diese Methode bietet eine zusätzliche Möglichkeit, die Leerheit eines Arrays zu prüfen.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die oben genannten Techniken in einem vollständigen Sub verwenden kannst:

Sub Mapping_Logfiles()
    Dim arr() As Variant
    Dim sfaPtr As Long
    Dim iCounter As Long
    Dim sPath As String
    Dim sPattern As String

    sPath = Worksheets("Menue").Cells(FirstToolRow + Tool, 16)
    sPattern = Suchmuster$
    arr = arrAll(sPath, sPattern)
    GetSafeArrayPointer arr, sfaPtr

    If sfaPtr > 0 Then
        For iCounter = 1 To UBound(arr)
            Cells(iCounter + 1, 2) = sPath & arr(iCounter)
        Next iCounter
    Else
        MsgBox "Array ist nicht initialisiert"
    End If
End Sub

In diesem Beispiel wird das Array gefüllt, und es wird geprüft, ob es leer ist, bevor auf seine Elemente zugegriffen wird.


Tipps für Profis

  • Verwende Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert werden. Dies kann helfen, Fehler zu vermeiden.
  • Bei großen Datenmengen kann das Überprüfen auf leere Arrays die Leistung Deines Codes beeinflussen. Optimiere Deine Funktionen entsprechend.
  • Dokumentiere Deinen Code gut, um anderen (oder Dir selbst) zu helfen, die Logik hinter der Überprüfung leere Array zu verstehen.

FAQ: Häufige Fragen

1. Wie kann ich ein leeres Array in VBA erstellen?
Ein leeres Array kannst Du einfach deklarieren, z.B. Dim arr() As Variant und dann mit einer Funktion befüllen.

2. Was passiert, wenn ich versuche, auf ein leeres Array zuzugreifen?
Wenn Du versuchst, auf ein leeres Array zuzugreifen, ohne vorher zu prüfen, ob es initialisiert ist, erhältst Du in der Regel einen Laufzeitfehler 9. Es ist wichtig, vor dem Zugriff auf das Array zu prüfen, ob es leer ist.

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