VBA ist sehr gut geeignet, um unter Microsoft Office sich bestimmter nerviger Aufgaben zu entledigen und seine Produktivität auf das wesentliche zu beschränken.
Schreibt man viel VBA-Code, benötigt man sicherlich irgendwann eine Funktion zum Überpfüfen, ob eine Ordner oder Verzeichnispfad existiert. Es gehört eigentlich zum guten Ton der Programmierung, dass man eine solche Überprüfung vornimmt. Denn möchte man etwas mittels VBA-Code speichern, zum Beispiel eine E-Mail oder deren Anhänge, so kommt es zu einer Exception-Meldung, wenn das ausgewählte Verzeichnis nicht vorhanden ist.
Der Test, ob der Ordner vorhanden ist erfolgt ganz einfach über diese Funktion:
CreateObject("Scripting.FileSystemObject").FolderExists(strPath)
Die Funktion CreateObject gibt ein ActiveX-Objekt zurück. Das ActiceX-Objekt macht, allgemein gesprochen, andere Funktionen auf Betriebssystemebene unter Windows verfügbar. Da hier der Parameter „Scripting.FileSystemObject“ übergeben wird, werden in diesem Fall Datei- und Verzeichnisfunktionen zur Verfügung gestellt. In unserem Anwendungsfall benötigen wir die Funktion FolderExists. Als Übergabeparameter gibt man einen String (strPath) mit dem vollständigen Verzeichnispfad an. Die Funktion gibt dann True oder False zurück, je nach dem, ob der Ordner existiert.
Code-Beispiel FolderExists
In diesem Code-Beispiel arbeiten wir mit Variablen für den Ordner-Pfad (strPath) und dem boolschen Rückgabewert der Funktion (isDir), da der Verzeichnispfad oftmals als String-Variable vorliegen wird, zum Beispiel als übergebener Parameter einer Funktion. Die Funktion Debug.Print schreibt dann die Ausgabe ins Direktfenster.
Dim strPath As String
Dim isDir As Boolean
strPath = "c:\Users\MyUserName\Desktop\"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)
Debug.Print isDir
Anstelle von Debug.Print, wird man natürlich das Ergebnis isDir weiterverarbeiten und mit einer If-Anweisung überprüfen, ob die Verzeichnis-Prüfung Wahr oder Falsch ist. Existiert das Verzeichnis noch nicht, so könnte man in einer weiteren Anweisung das Verzeichnis erstellen mit dem Befehl MkDir(…).
Dim strPath As String
Dim isDir As Boolean
strPath = "c:\Users\MyUserName\Desktop\"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)
If isDir = True Then
'Mache etwas, zum Beispiel eine Datei unter dem Verzeichnis speichern
Debug.Print "Verzeichnis existiert"
Else
'Mache etwas, wenn Ordner nicht existiert
Debug.Print "Verzeichnis nicht vorhanden"
End If
Für die Schreibfaulen gibt es hier noch eine kurze Variante:
If CreateObject("Scripting.FileSystemObject").FolderExists("c:\Users\MyUserName\Desktop\") Then
'Mache etwas, zum Beispiel eine Datei unter dem Verzeichnis speichern
Debug.Print "Verzeichnis existiert"
Else
'Mache etwas, wenn Ordner nicht existiert
Debug.Print "Verzeichnis nicht vorhanden"
End If
Code-Beispiel Dir
Eine andere Methode, die ich nicht so elegant finde, welche aber genauso funktioniert, zeigt das folgende Code-Beispiel. Hier wird die Funktion Dir(…) verwendet, welche eine leere Zeichefolge zurückgibt, wenn der Ordner nicht existiert.
'String für Ordnerpfad definieren
Dim strFolderPath As String
strFolderPath = "c:\Users\MyUserName\Desktop\1\"
' Überprüfen, ob Ordner bereits existiert
If Dir(strFolderPath, vbDirectory) = "" Then
' Ordner existiert noch nicht
Debug.Print "Ordner existiert nicht"
Else
' Ordner ist vorhanden
Debug.Print "Ordner ist vorhanden!"
End If
Als Parameter muss man der Dir-Funktion den Verzeichnispfad (strFolderPath) übergeben sowie das Attribut vbDirectory.
Fazit
Man sieht, es ist also relativ in VBA einfach zu überprüfen, ob ein Ordner existiert. Und man sollte davon regen Gebrauch machen, gerade dann, wenn es unsicher ist, ob das Verzeichnis schon angelegt worden ist oder der Ordnerpfad durch Benutzerangaben vorgegeben worden ist.
geht nicht
das ist schade, dass es nicht auf Anhieb bei dir funktioniert. Irgendwelche Fehlermeldungen?