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