VBA Prüfen, ob ein Ordner/Verzeichnis existiert (FolderExists)

VBA - Visual Basic for Application

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.

Bestseller Nr. 1

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.

Bestseller Nr. 1
Bestseller Nr. 2

2 Kommentare

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert