Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1312to1316
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Problem: schreibgeschützte Datei erkennen

Problem: schreibgeschützte Datei erkennen
10.05.2013 12:10:25
Levi
Hallo zusammen,
stehe wieder mal vor einem Problem:
Ich habe ein Makro, mit dem ich Kundennummern aus einer anderen Datei abfragen kann. Das funktioniert bestens. Voraussetzung dazu ist, dass die Kundennummer-Datei offen ist.
Damit dies gewährleistet ist, wird zuerst abgefragt, ob die Datei schon offen ist (=weiter im Marko) oder zu (=Datei wird geöffnet). Funktioniert ebenfalls.
Zum Problem: wenn die Kundennummer-Datei SCHREIBGESCHÜTZT geöffnet ist, wird diese nicht als offen erkannt und will nochmals geöffnet werden. Wo liegt der Fehler?
Meine bescheidene Vermutung: es liegt in der Zeile:
"Open tFileName For Random Access Read Lock Read Write As #hFile"...?
Danke für jede Hilfe!
Gr Levi
Sub Abfrage()
If IsFileInUse("T:\xxx.xls") = True Then
usrSuchen.Show 'Führt Nummernabfrage durch, funktioniert einwandfrei
Else
If MsgBox("Bitte zuerst Datenbank öffnen!" & Chr(13) & "Jetzt direkt öffnen?", vbYesNo +  _
vbQuestion, "Fehlende Datei") = vbYes Then
Workbooks.Open Filename:="T:xxx.xls", UpdateLinks:=0, ReadOnly:=True
End If
usrSuchen.Show 'Führt Nummernabfrage durch, funktioniert einwandfrei
End If
End Sub

Function IsFileInUse(tFileName As String) As Boolean
Dim hFile     As Long
On Error Resume Next
hFile = FreeFile()
Open tFileName For Random Access Read Lock Read Write As #hFile
IsFileInUse = Err.Number  0
Close #hFile
End Function

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem: schreibgeschützte Datei erkennen
10.05.2013 12:53:21
MatthiasG
Hallo Levi,
deine Funktion IsFileInUse() fragt eben nur ab, ob die Datei gesperrt, also mit Schreibrecht geöffnet ist - evtl. auch von einer anderen Excel-Instanz auf einem anderen Rechner.
Das ist nur sinnvoll, wenn du die Datei bearbeiten musst.
Du kannst aber abfragen, ob sie in deiner aktuellen Excel-Instanz geöffnet ist (egal ob schreibgeschützt oder nicht):

Dim wbisOpen as Boolean
wbisOpen = False
For Each wb In Application.Workbooks
If UCase(wb.FullName) = UCase("T:\xxx.xls") Then _
wbisOpen = True: Exit For
Next wb
If Not wbisOpen then ... 'hier anbieten, Die Mappe zu öffnen

Gruß Matthias

Anzeige
AW: Problem: schreibgeschützte Datei erkennen
10.05.2013 13:21:48
Levi
Hallo Matthias,
Vielen Dank, dein Rat funktioniert einwandfrei!
Und schon wieder habe ich was gelernt:
War der Meinung, dass es eigentlich "If Not wbisOpen = True Then" heissen müsste, aber "If Not wbisOpen Then" funktioniert ebenfalls. Also 2 Fliegen auf einen Klatsch gelernt :-)
Danke und Gruss
Levi

AW: Problem: schreibgeschützte Datei erkennen
10.05.2013 13:47:16
Luschi
Hallo Levi,
die 'verkürzte' Schreibweise: If Not wbisOpen Then
ist keine Faulheit des Programmieres, sondern der Logik von Vergleichsoperationen
geschuldet. Erst wird der Vergleich ausgeführt und das Wahrheitsergebgnis
(und nur dieses) dem If-Befehl übermittelt (True oder False).
Deshalb kann und sollte man die boolsche Variable dem If-Kontrukt direkt zuweisen
ohne zusätzlichen Vergleich 'True = True' bzw. 'True = False' (kostet nur unnötige
Rechenzeit und ist vor allem nutzlos!).
Gruß von Luschi
aus klein-Paris

Anzeige
Danke!
10.05.2013 13:59:35
Levi
Hoi Luschi,
ebenfalls Dankeschön für die Erklärung!
Ich bleib dabei: dies ist das beste Excel-Forum, einfach grossartig!
Gr
Levi

Man könnte natürlich auch ...
10.05.2013 16:46:12
Luc:-?

Dim wbisOpen as Boolean
…
For Each wb In Application.Workbooks
Let wbisOpen = UCase(wb.FullName) = UCase("t:\xxx.xls")
If wbisOpen Then Exit For
Next wb
If Not wbisOpen then …
…schreiben, Gerd & Levi! ;-)
Dabei ist der Startwert von wbisOpen ohnehin stets False (bei Static-Variablen ggf nur bei Erstaufruf der Prozedur).
Gruß Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige