Tipps und Tricks 4/2013

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

In dieser Reihe unserer Tipps und Tricks rund um Access und VBA erfahren Sie, wie Sie mit einer einfachen VBA-Funktion blitzschnell Verzeichnisse erstellen. Außerdem lernen Sie eine kleine VBA-Prozedur kennen, mit der Sie Texte mithilfe von Google von Deutsch nach Englisch übersetzen können. Haben Sie auch noch einen coolen Tipp für uns Immer her damit – einfach an info@access-im-unternehmen.de.

Verzeichnisse erstellen

Mal eben schnell per VBA ein Verzeichnis erstellen Kein Problem: Sofern nur eine Verzeichnisebene zu erstellen ist und die darunter liegenden Ebenen bereits vorhanden sind, brauchen Sie dazu nur den MkDir-Befehl mit entsprechenden Parametern abzusetzen.

Wenn es jedoch mehrere Verzeichnis-ebenen sein sollen und Sie noch nicht einmal wissen, ob eine oder mehrere Ebenen bereits existieren, kommt die Funktion aus Listing 1 genau richtig. Voraussetzung ist, dass es sich um ein Verzeichnis mit Angabe des Laufwerkbuchstabens handelt, also etwa c:\Test.

Public Function CreateDir(strDir) As Boolean
     Dim strDirTemp As String
     Dim intPosStart As Integer
     intPosStart = InStr(4, strDir, "\")
     If Not Right(Trim(strDir), 1) = "\" Then
         strDir = strDir & "\"
     End If
     Do While Not intPosStart = 0
         On Error Resume Next
         MkDir Mid(strDir, 1, intPosStart)
         On Error GoTo 0
         intPosStart = InStr(intPosStart + 1, strDir, "\")
     Loop
     CreateDir = Len(Dir(strDir, vbDirectory)) > 0
End Function

Listing 1: Erstellen eines Verzeichnisses per VBA-Funktion

Die Funktion rufen Sie beispielsweise mit dem folgenden Befehl auf, wobei Sie das Ergebnis sowohl im Direktbereich ausgeben (wie in diesem Fall) oder auch im Code weiterverarbeiten können:

  CreateDir ("c:\test1\test2\test3")
Wahr

Die Funktion ermittelt den Beginn der eigentlichen Verzeichnisse und speichert die Position des ersten Backslash in der Integer-Variablen intPosStart. Außerdem prüft sie, ob der angegebene Ausdruck mit einem Backslash endet.

Dies ist nötig, damit auch das hinterste Verzeichnis angelegt wird. Sollte der Backslash fehlen, ergänzt die Funktion diesen noch.

Nach den Vorbereitungsarbeiten durchläuft die Funktion so lange eine Do While-Schleife, bis die Variable intPosStart den Wert 0 enthält. Die Prozedur legt nun mit der MkDir-Methode das Verzeichnis an, das dem Inhalt von strDir bis zu der in intPosStart gespeicherten Position entspricht – im ersten Durchlauf also etwa c:\test1\. Sollte das Verzeichnis bereits vorhanden sein, führt dies zu einem Fehler – was aber nicht weiter schlimm ist, denn wir haben die Fehlerbehandlung mit der On Error Resume Next-Anweisung während der Ausführung von MkDir deaktiviert. Ist das Verzeichnis noch nicht vorhanden, legt die Funktion dieses an.

Nach dem Anlegen sucht die Funktion die Position des nächsten Backslash-Zeichens und legt das Verzeichnis c:\test1\test2\ an, sofern dieses noch nicht vorhanden ist. Nach dem Anlegen des Verzeichnisses c:\test1\test2\test3\ findet die Funktion schließlich kein weiteres Backslash-Zeichen mehr, wodurch intPosStart den Wert 0 annimmt – und damit ist die Abbruchbedingung erfüllt und die Do While-Schleife wird verlassen.

Da wir zwischenzeitlich beim Anlegen der jeweiligen Verzeichnisse die Fehlerbehandlung deaktiviert haben, werden Fehler beim Anlegen nicht gemeldet. Um dennoch nach dem Verlassen der Funktion zu erfahren, ob das Verzeichnis angelegt wurde, prüft die Funktion noch das Vorhandensein des Verzeichnisses mit der Dir-Funktion. Das Ergebnis dieser Funktion wird schließlich als Funktionswert von CreateDir zurückgegeben.

Grundsätzlich ließe sich die Funktion also auch dazu nutzen, sicherzustellen, dass ein Verzeichnis vorhanden ist – auch wenn es gar nicht mehr angelegt werden muss.

Texte per Google und VBA übersetzen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar