Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Testen ob eine Datei vorhanden ist

8 views
Skip to first unread message

Ronny Rost

unread,
Nov 14, 2003, 7:37:13 AM11/14/03
to
Hi Leute,

wie kann man per VBA testen, ob eine Datei vorhanden ist?
Ich möchte es nicht über das öffnen probieren und dann das
Fehlerobject auswerten, es müsste auch etwas einfacher
gehen.

Gruß Ronny

anon...@discussions.microsoft.com

unread,
Nov 14, 2003, 7:56:47 AM11/14/03
to
Hallo Ronny
mit folgender Routine geht es. Statt "Test.xls" kann der
Funktion auch eine Str-Variable übergeben werden. Die
eigentliche Prüfung erfolgt über die Function
ExistiertDatei.

Gruss, Hans Faber

Sub Dateiprüfung()
Dim strPfad As String
'Prüfung, ob Datei "Test.xls" im gleichen Verzeichnis
vorhanden ist ...
strPfad = ActiveWorkbook.Path & Application.PathSeparator
'Aufruf Function ExistiertDatei
If Not ExistiertDatei(strPfad & "Test.xls") Then
MsgBox "Datei nicht vorhanden"
Else
MsgBox "Datei vorhanden"
End If
End Sub

Function ExistiertDatei(strDatei As String) As Boolean
If Dir(strDatei) <> "" Then
ExistiertDatei = True
Else
ExistiertDatei = False
End If
End Function

>-----Originalnachricht-----

>.
>

Philipp von Wartburg

unread,
Nov 14, 2003, 3:52:23 PM11/14/03
to
Hallo Ronny

Man sollte mindestens drei Tests durchführen, bevor man eine
(xls-)Datei öffnet. Aber: Trotz sämtlicher Tests darfst du keines-
falls auf eine Fehlerbehandlungsroutine verzichten (mehr dazu am
Schluss dieses Postings)!

Hier der VBA-Code für die drei Tests:

1) Die Existenz einer Datei kann man mit VBA so prüfen:
Sub CheckFile()
If Dir("C:\Daten\MeineMappe.xls") <> "" Then
MsgBox "Die Datei existiert."
Else
MsgBox "Die Datei existiert nicht."
End If
End Sub

Wenn man ganz sicher gehen will und auch verborgene Dateien
berücksichtigen möchte, sollte man bei der Dir-Funktion den
Parameterwert "vbHidden" angeben:
If Dir("C:\Daten\MeineMappe.xls", vbHidden) <> "" Then

2) Zusätzlich sollte man vor dem Öffnen prüfen, ob die Datei nicht
bereits in der Excel-Sitzung geöffnet ist. Das lässt sich mit einer
kleinen Funktion erledigen:
Function CheckIfOpen(strFilename As String) As Boolean
Dim wbkWorkbook As Workbook
For Each wbkWorkbook In Application.Workbooks
If UCase(wbkWorkbook.Name) = UCase(strFilename) Then
CheckIfOpen = True
Exit Function
End If
Next wbkWorkbook
CheckIfOpen = False
End Function

Die obige Funktion wird wie folgt aufgerufen:
Sub TestCall()
If CheckIfOpen("MeineMappe.xls") Then
MsgBox "Die Mappe ist in dieser Excel-Sitzung geöffnet."
Else
MsgBox "Die Mappe ist in dieser Excel-Sitzung nicht geöffnet."
End If
End Sub

3) Ich empfehle eine weitere Überprüfung. Die zu öffnende Datei
könnte nämlich bereits in einer anderen Excel-Sitzung geöffnet
sein, d.h. auf dem gleichen oder einem anderen PC, von einem
anderen User oder einem anderem Programm. Ob die Datei
wirklich verfügbar ist, ermittelt diese Funktion:
Function IsFileOpen(ByVal strFileame As String) As Boolean
Dim intErrorNum As Integer
On Error Resume Next
Open strFilename For Input Lock Read As #1
Close #1
intErrorNum = Err.Number
On Error GoTo 0
Select Case intErrorNum
Case 0
'Kein Fehler, also ist Datei nicht geöffnet
IsFileOpen = False
Case 70
'Fehler "Zugriff verweigert", also ist Datei geöffnet
IsFileOpen = True
Case Else
'Anderer Fehler
Error intErrorNum
End Select
End Function

Die Funktion wird so aufgerufen:
Sub TestCall()
If IsFileOpen("C:\Daten\MeineMappe.xls") Then
MsgBox "Datei ist momentan geöffnet."
Else
MsgBox "Datei ist momentan nicht geöffnet."
End If
End Sub

Wenn die obigen drei Tests bestanden sind, kann man die Datei mit
hoher Wahrscheinlichkeit öffnen.

Betreffend Fehlerbehandlung:
Wenn man wie in Test 1) gezeigt mit der Dir-Funktion die Dateiexistenz
prüft, muss man unbedingt einen Error Handler verwenden, d.h.
"On Error Goto ErrorHandler" und Err.Number auswerten. Das Laufwerk
oder der Datenträger mit der Datei könnten nämlich nicht ansprechbar sein:
- Dir("A:\Daten\MeineMappe.xls") ohne Diskette führt zu Fehler 71
- Dir("E:\Daten\MeineMappe.xls") ohne CD führt zu Fehler 76
- Dir("S:\Daten\MeineMappe.xls") ohne LAN führt zu Fehler 68

In kritischen Geschäftsanwendungen sollte man unbedingt weitere Tests
durchführen, unter anderem diese:
- Besitzt die Datei das Excel Arbeitsmappen-Format?
- Ist die Datei grösser als 0 Byte?
- Sind genügend Benutzerrechte zum Öffnen vorhanden?
- Verwendet die Mappe ein Lese-/Schreibkennwort (Dateikennwort)?
- Besitzt die Mappe ein Schreibschutzkennwort?

PS: Auf der "The SOSCQ Page" findest du sämtliche Informationen über
alles, was irgendwie mit Excel und Dateien zu tun hat.
http://195.186.84.74/soscq/index.htm

Gruss
Philipp von Wartburg

"Ronny Rost" <anon...@discussions.microsoft.com> schrieb im Newsbeitrag
news:096001c3aaac$076285e0$a401...@phx.gbl...

0 new messages