EXCEL 2010 VBA: Funktion, die prüft, ob eine Datei/ein Pfad existiert
Transcrição
EXCEL 2010 VBA: Funktion, die prüft, ob eine Datei/ein Pfad existiert
EXCEL 2010 VBA: Funktion, die prüft, ob eine Datei/ein Pfad existiert Aktualisiert Montag, den 04. November 2013 um 19:37 Uhr Die Funktionen FileExist und PathExist prüfen, ob eine Datei/ein File oder ein Pfad/Ordner/Path, den man ansprechen möchte, überhaupt vorhanden ist Aufgabenstellung Spricht man im Programmablauf eine Datei oder einen Pfad an, der nicht vorhanden ist, kommt es zu einem unschönen Laufzeitfehler, der einen vollständigen Programmabbruch zur Folge hat. Das kann man vermeinden, indem man zuvor überprüft, ob die Datei oder der Pfad, mit dem man arbeiten möchte, überhaupt existiert. Dazu dienen die beiden Funktionen FileExist und PathExist, die hier im Folgenden vorgestellt werden. Anzumerken ist, dass, auch wenn man die Existenz einer Datei mit FileExist prüfen möchte, den vollständigen Pfad angibt (z.B.: "C:MeinPfadMeineDatei.dat"). Wird zuvor mit ChDir in den Pfad gewechselt, in dem sich die gesuchte Datei befindet, ist die vollständige Pfadangabe nicht notwendig (dann reicht als Übergabeparameter "MeineDatei.dat"). Funktionsweise Beiden Funktionen sind als Übergabeparameter entweder der vollständige Deiname inkl. Pfad ( FileExist ) bzw. der Pfadname ( PathExist ) zu übergeben. Wird die Datei bzw. der Pfad gefunden, liefern die Funktionen ein True zurück, ansonsten wird ein False geliefert. So kann die Funktion leicht in z.B. if..Then..Else -Konstrukte aufgenommen werden. VBA-Code FileExist Function FileExist(ByVal vDateiname As String) As Boolean 1/4 EXCEL 2010 VBA: Funktion, die prüft, ob eine Datei/ein Pfad existiert Aktualisiert Montag, den 04. November 2013 um 19:37 Uhr Dim lKanal As Long ' In VBA werden Dateien über eine Dateinummer angesprochen, ' diese Nummer wird in der Variablen lKanal vorgehalten. ' Hier wird dem Interpreter von VBA gesagt, wie er sich im Falle eines Fehlers verhalten soll. ' Wenn ein Fehler auftritt, soll er zu der Ansprungmarke ErrorFileExist springen, aber ' keinen Laufzeitfehler/Runtimeerror ausgeben und nicht den Programmablauf abbrechen. On Error GoTo ErrorFileExist lKanal = FreeFile ' Hier wird eine freie Dateinummer vom System abgerufen und der Variablen ' lKanal zugewiesen. ' Nun wird versucht, die übergebene Datei zu öffnen. ' Träte ein Fehler auf, würde er von hier aus direkt zur Ansprungmarke ErrorFileExist springen. Open vDateiname For Input As #lKanal ' Wenn die Datei existiert, dann müssen wir diese Datei der Ordnung halber wieder schließen. Close #lKanal FileExist = True ' Die Datei existiert, sonst wäre der Interpreter nicht bis hier hin gekommen. ' Als Rückgabewert wird also an die Funktion True übergeben. On Error GoTo 0 ' Hier wird das Unterlassen der Fehlerbehandlung durch VBA wieder ausgeschaltet. ' Wird in der Folge ein Laufzeitfehler identifiziert, wird das Programm wieder ' mit einer entsprechenden Fehlermeldung unterbrochen. Exit Function ' Alles ist erledigt und die Funktion kann verlassen werden. Der Nachfolgende Programm ' code wird nicht ausgeführt. ErrorFileExist: ' Hier kommt der Interpreter von VBA nur vorbei, wenn wirklich ein Fehler aufgetreten ist, ' in unserem Fall konnte die Datei, die man als Parameter mit übergeben hat, nicht geöffnet ' werden, und das liegt höchstwahrscheinlich daran, dass sie nicht existiert. FileExist = False ' Der Funktionsrückgabewert wird auf False gesetzt, die Datei ist also nicht existent. 2/4 EXCEL 2010 VBA: Funktion, die prüft, ob eine Datei/ein Pfad existiert Aktualisiert Montag, den 04. November 2013 um 19:37 Uhr On Error GoTo 0 ' Hier wird das Unterlassen der Fehlerbehandlung durch VBA wieder ausgeschaltet. ' Wird in der Folge ein Laufzeitfehler identifiziert, wird das Programm wieder ' mit einer entsprechenden Fehlermeldung unterbrochen. End Function VBA-Code PathExist Function PathExist(ByVal vPfadName As String) As Boolean ' Hier wird dem Interpreter von VBA gesagt, wie er sich im Falle eines Fehlers verhalten soll. ' Wenn ein Fehler auftritt, soll er zu der Ansprungmarke ErrorPathExist springen, aber ' keinen Laufzeitfehler/Runtimeerror ausgeben und nicht den Programmablauf abbrechen. On Error GoTo ErrorPathExist ' Hier ist die Sollbruchstelle in der Funktion. Wenn das Wechseln in den Pfad klappt, dann ' existiert der Pfad, wenn nicht, dann tritt ein Fehler auf und VBA reagiert wie befohlen, ' es macht im Programmablauf bei der Ansprungmarke ErrorPathExist weiter. ChDir (vPfadName) PathExist = True ' Die Pfad existiert, sonst wäre der Interpreter nicht bis hier hin gekommen. ' Als Rückgabewert wird also an die Funktion True übergeben. On Error GoTo 0 ' Hier wird das Unterlassen der Fehlerbehandlung durch VBA wieder ausgeschaltet. ' Wird in der Folge ein Laufzeitfehler identifiziert, wird das Programm wieder ' mit einer entsprechenden Fehlermeldung unterbrochen. Exit Function ' Alles ist erledigt und die Funktion kann verlassen werden. Der Nachfolgende Programm ' code wird nicht ausgeführt. ErrorPathExist: ' Hier kommt der Interpreter von VBA nur vorbei, wenn wirklich ein Fehler 3/4 EXCEL 2010 VBA: Funktion, die prüft, ob eine Datei/ein Pfad existiert Aktualisiert Montag, den 04. November 2013 um 19:37 Uhr aufgetreten ist, ' in unserem Fall konnte der Pfad/der Ordner, die man als Parameter mit übergeben hat, nicht gefunden ' werden, und das liegt höchstwahrscheinlich daran, dass er nicht existiert. PathExist = False ' Der Funktionsrückgabewert wird auf False gesetzt, der Pfad/der Ordner ist also nicht existent. On Error GoTo 0 ' Hier wird das Unterlassen der Fehlerbehandlung durch VBA wieder ausgeschaltet. ' Wird in der Folge ein Laufzeitfehler identifiziert, wird das Programm wieder ' mit einer entsprechenden Fehlermeldung unterbrochen. End Function 4/4