Wie prüft man in einem VBA-Makro auf ein leeres Array?
Ich möchte nach leeren Arrays suchen. Google gab mir verschiedene Lösungen, aber nichts funktionierte. Vielleicht bin ich nicht sie richtig anwenden.
Function GetBoiler(ByVal sFile As String) As String
'Email Signature
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.ReadAll
ts.Close
End Function
Dim FileNamesList As Variant, i As Integer
' activate the desired startfolder for the filesearch
FileNamesList = CreateFileList("*.*", False) ' Returns File names
' performs the filesearch, includes any subfolders
' present the result
' If there are Signatures then populate SigString
Range("A:A").ClearContents
For i = 1 To UBound(FileNamesList)
Cells(i + 1, 1).Formula = FileNamesList(i)
Next i
SigString = FileNamesList(3)
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
Hier, wenn FileNamesList
Array leer ist, sollte GetBoiler(SigString)
überhaupt nicht aufgerufen werden. Wenn das Array FileNamesList
leer ist, ist auch SigString
leer und dies ruft die Funktion GetBoiler()
mit einem leeren String auf. Ich erhalte einen Fehler in der Zeile
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
da sFile
leer ist. Gibt es eine Möglichkeit, das zu vermeiden?
57
3
Da Sie mit einem String-Array zu tun haben, haben Sie Join in Betracht gezogen?
Dieser Code tut nicht das, was Sie erwarten:
Wenn Sie
Dir
eine leere Zeichenkette (""
) odervbNullString
übergeben, wird der Name der ersten Datei im aktuellen Verzeichnispfad zurückgegeben (der vonCurDir$
zurückgegebene Pfad). Wenn alsoSigString
leer ist, wird IhreIf
-Bedingung alsTrue
ausgewertet, weilDir
eine nicht-leere Zeichenkette zurückgibt (den Namen der ersten Datei im aktuellen Verzeichnis), undGetBoiler
wird aufgerufen. Und wennSigString
leer ist, wird der Aufruf vonfso.GetFile
fehlschlagen.Sie sollten entweder Ihre Bedingung ändern, um zu prüfen, ob
SigString
nicht leer ist, oder die MethodeFileSystemObject.FileExists
anstelle vonDir
verwenden, um zu prüfen, ob die Datei existiert. Die Verwendung vonDir
ist knifflig, gerade weil es Dinge tut, die man vielleicht nicht erwartet. Ich persönlich würdeScripting.FileSystemObject
gegenüberDir
bevorzugen, weil es keine komischen Dinge gibt (FileExists
gibtTrue
zurück, wenn die Datei existiert, und, nun ja,False
, wenn sie nicht existiert). Darüber hinaus drücktFileExists
die Intention Ihres Codes viel deutlicher aus alsDir
.Methode 1: Prüfen Sie zuerst, ob
SigString
nicht leer istMethode 2: Verwenden Sie die Methode
FileSystemObject.FileExists
I'll verallgemeinern das Problem und die Frage wie beabsichtigt. Testen Sie die Zuordnung zum Array und fangen Sie den eventuellen Fehler ab
Sicher es vermisst Arrays mit allen negativen Indizes oder alle > 1... ist das wahrscheinlich? in weirdland, ja.