Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlermeldung bei bereits geöffneter Datei

Forumthread: Fehlermeldung bei bereits geöffneter Datei

Fehlermeldung bei bereits geöffneter Datei
pbaer007
Hallo VBA-Gemeinde,
In einem Makro soll der Benutzer einen bestimmten File auswählen, in den dann Daten geschrieben werden. Funktioniert insoweit alles sehr schön.
NUR wenn die "Ziel-Datei" bereits geöffnet ist, bekomme ich dann eine Fehlermeldung
"[Datei] ist bereits geöffnet. Wenn sie die Datei erneut öffnen....."
Wählt der Anwender , "stürtzt" das Makro ab.
Ich habe versucht im Netzt etwas zu finden, jedoch hab ich die Lösungsansätze nicht richtig umstricken können.
Kann mir jemand einen Tip geben?
Nachfolgend der Auszug aus dem Export-Makro:

varMsgBox = MsgBox("Please select the File_NAME", _
vbOKOnly + vbQuestion, "Selection of actual File")
Path = Application.GetOpenFilename
If Path = False Then
varMsgBox = MsgBox("User Cancelled!", vbOKOnly + vbCritical, "End of Procedure")
Exit Sub
End If
Workbooks.Open Filename:=Path
varFile2 = ActiveWorkbook.Name

Vielen Dank
Gert
Anzeige
AW: Fehlermeldung bei bereits geöffneter Datei
17.02.2011 10:32:11
Holger,
Hallo Gert,
was soll denn passieren, wenn der User ein bereits geöffnetes File öffnen möchte?
Du könntest ja vorher prüfen ob das File bereits im Zugriff ist und wenn ja abbrechen.
AW: Fehlermeldung bei bereits geöffneter Datei
17.02.2011 10:53:02
pbaer007
Hallo Holger,
Entschuldigung, das wichtigste hab ich vergessen.
Ja, wenn Excel feststellt, dass die Datei bereits geöffnet ist, dann soll das Makro abrechen.
evtl., wenn nicht zu aufwendig eine Infobox "Datei schon offen, erst schließen, dann neu starten"
und dann
"exit sub"
Vielen Dank
Gert
Anzeige
AW: Fehlermeldung bei bereits geöffneter Datei
17.02.2011 10:58:30
fcs
Hallo Gert,
vor dem Öffnen der ausgewählten Datei muss dann eprüft werden, ob eine Datei mit gleichem Namen bereits geöffnet ist.
Gruß
Franz
Function fncCheckWorkbook(strWorkbookName As String) As Boolean
'Prüft, ob Arbeitsmappe schon geöffnet
Dim wb As Workbook
For Each wb In Workbooks
If LCase(wb.Name) = LCase(strWorkbookName) Then
fncCheckWorkbook = True
Exit For
End If
Next
End Function
Function fncExtractFilename(strName As String) As String
'Trennt das Verzeichnis vom Dateinamen (ab Excel 2000)
If InStr(1, strName, Application.PathSeparator) = 0 Then
fncExtractFilename = strName
Else
fncExtractFilename = Mid(String:=strName, _
Start:=InStrRev(strName, Application.PathSeparator) + 1)
End If
End Function
Sub aatest()
varMsgBox = MsgBox("Please select the File_NAME", _
vbOKOnly + vbQuestion, "Selection of actual File")
Path = Application.GetOpenFilename
If Path = False Then
varMsgBox = MsgBox("User Cancelled!", vbOKOnly + vbCritical, "End of Procedure")
Exit Sub
End If
varfile2 = fncExtractFilename(strName:=Path)
If fncCheckWorkbook(strWorkbookName:=varfile2) = True Then
With Workbooks(varfile2)
If LCase(Path)  LCase(.FullName) Then
'Verzeichnis der geöffneten und der ausgewählten Datei stimmen nicht überein
.Close savechanges:=True
Workbooks.Open Filename:=Path
Else
.Activate
End If
End With
Else
Workbooks.Open Filename:=Path
End If
varfile2 = ActiveWorkbook.Name
End Sub

Anzeige
AW: zum Lösungsansatz
17.02.2011 11:12:52
pbaer007
Hallo Franz,
vielen Dank schon einmal.
Werde das ausprobieren und mich noch einmal melden.
Gert
AW: Nachtrag
17.02.2011 11:16:21
fcs
Hallo Gert,
hier noch ein kleiner Nachtrag, der prüft, ob die Datei schreibgeschützt geöffnet wurde, weil ein ander User die Datei geöffnet hat.
Gruß
Franz
Sub aatest()
varMsgBox = MsgBox("Please select the File_NAME", _
vbOKOnly + vbQuestion, "Selection of actual File")
Path = Application.GetOpenFilename
If Path = False Then
varMsgBox = MsgBox("User Cancelled!", vbOKOnly + vbCritical, "End of Procedure")
Exit Sub
End If
varfile2 = fncExtractFilename(strName:=Path)
Application.DisplayAlerts = False
If fncCheckWorkbook(strWorkbookName:=varfile2) = True Then
With Workbooks(varfile2)
If LCase(Path)  LCase(.FullName) Then
'Verzeichnis der geöffneten und der ausgewählten Daei stimmen nicht überein
.Close savechanges:=True
Workbooks.Open Filename:=Path
Else
.Activate
End If
End With
Else
Workbooks.Open Filename:=Path
End If
If ActiveWorkbook.ReadOnly = True Then
MsgBox "The selected file was openend by an other user. Please try later!", _
vbInformation + vbOKOnly, "End of Procedure"
ActiveWorkbook.Close savechanges:=False
Application.DisplayAlerts = True
Exit Sub
End If
Application.DisplayAlerts = True
varfile2 = ActiveWorkbook.Name
End Sub

Anzeige
AW: Nachtrag >>> Problem gelöst
17.02.2011 15:35:36
pbaer007
Hallo Franz,
bin zwar noch nicht ganz fertig mit den Feinarbeiten, aber bis jetzt funktioniert deine Lösung.
SUPER, vielen Dank.
Gert
File Spezialisten hierher:
17.02.2011 10:59:19
Holger,
Hallo Gert,
und da du natürlich nicht weißt, welche Datei der user auswählt, wird es etwas kompliziert.
Ich setze die Frage auf offen, da ich auf die Schnelle keine Lösung habe.
Es geht mit Sicherheit mit FileObject, aber wie müßte ich daheim in meinem Buch nachschauen.
Mir wäre nur eingefallen mit
For each wb in Wokbooks
if wb = path
next wb
zu prüfen, aber das geht ja nur, wenn die Datei derselbe User geöffnet hat.
Anzeige
AW: File Spezialisten hierher:
17.02.2011 11:15:52
pbaer007
Hallo Holger,
zu 99% hat der selbe User die Datei offen.
Demnach könnte dann die kleine Lösung reichen.
Bau ich die einfach vor der Zeile
" Workbooks.Open Filename:=Path "
ein?
Gert
Ich mache es so:
17.02.2011 12:23:21
Holger,
Hallo Gert,
vor dem Workbooks Open Befehl würde ich prüfen,. ob der User diese Datei schon offen hat mit:
For each wb in Workbooks
if wb.name= Path.Name (ACHTUNG: hier musst du natürlich den eigentlichen Filenamen  _
herausfinden) then
msg box" Datei schon geöffnet", vbcritical
exit sub
end if
next wb

Anzeige
AW: Ich mache es so:
17.02.2011 15:31:46
pbaer007
Hallo Holger,
vielen Dank für die Unterstützung.
Ich habe jetzt doch den etwas komplexeren Weg von Franz verwendet.
Du kannst die Frage somit als "erledigt" ansehen.
Viele Grüße
Gert
Anzeige
Anzeige

Infobox / Tutorial

Fehlermeldung bei bereits geöffneter Excel-Datei beheben


Schritt-für-Schritt-Anleitung

Um die Fehlermeldung zu umgehen, wenn ein Benutzer versucht, eine bereits geöffnete Datei in Excel zu öffnen, kannst Du folgende Schritte befolgen:

  1. Erstelle eine Funktion zur Überprüfung: Füge eine Funktion hinzu, die prüft, ob die Datei bereits geöffnet ist.

    Function fncCheckWorkbook(strWorkbookName As String) As Boolean
       Dim wb As Workbook
       For Each wb In Workbooks
           If LCase(wb.Name) = LCase(strWorkbookName) Then
               fncCheckWorkbook = True
               Exit Function
           End If
       Next
       fncCheckWorkbook = False
    End Function
  2. Führe die Überprüfung vor dem Öffnen der Datei durch: In Deinem bestehenden Makro musst Du die Überprüfung einfügen, bevor die Datei geöffnet wird.

    If fncCheckWorkbook(strWorkbookName:=varfile2) = True Then
       MsgBox "Die Datei ist bereits geöffnet. Bitte schließen Sie die Datei und versuchen Sie es erneut.", vbCritical
       Exit Sub
    End If
  3. Öffne die Datei nur, wenn sie nicht geöffnet ist: Setze den Workbooks.Open Befehl nur ein, wenn die Datei nicht bereits im Zugriff ist.


Häufige Fehler und Lösungen

  • Fehler: "Die Datei ist bereits geöffnet. Möchten Sie die Datei erneut öffnen?"

    • Lösung: Implementiere die oben beschriebene Überprüfungsfunktion, um diese Fehlermeldung zu vermeiden.
  • Fehler: "Die Datei wurde schreibgeschützt geöffnet."

    • Lösung: Prüfe, ob die Datei im schreibgeschützten Modus geöffnet wurde, und informiere den Benutzer.
    If ActiveWorkbook.ReadOnly = True Then
       MsgBox "Die Datei wurde von einem anderen Benutzer geöffnet. Bitte versuchen Sie es später erneut.", vbInformation
       Exit Sub
    End If

Alternative Methoden

Anstelle einer VBA-Lösung könntest Du folgende Ansätze in Betracht ziehen:

  • Excel-Optionen anpassen: Stelle sicher, dass die Datei nicht versehentlich schreibgeschützt geöffnet wird, indem Du die entsprechenden Excel-Optionen überprüfst.

  • Datei-Management-Tools verwenden: Nutze Tools, die die Dateiaktivitäten überwachen, um festzustellen, ob eine Datei bereits geöffnet ist.


Praktische Beispiele

Hier ist ein vollständiges Beispiel für das Makro, das die oben genannten Überprüfungen integriert:

Sub aatest()
   varMsgBox = MsgBox("Bitte wählen Sie die Datei aus", vbOKOnly + vbQuestion, "Auswahl der Datei")
   Path = Application.GetOpenFilename
   If Path = False Then
       MsgBox "Benutzer hat abgebrochen!", vbOKOnly + vbCritical, "Ende der Prozedur"
       Exit Sub
   End If
   varfile2 = fncExtractFilename(strName:=Path)
   If fncCheckWorkbook(strWorkbookName:=varfile2) = True Then
       MsgBox "Die Datei ist bereits geöffnet. Bitte schließen Sie die Datei und versuchen Sie es erneut.", vbCritical
       Exit Sub
   End If
   Workbooks.Open Filename:=Path
   If ActiveWorkbook.ReadOnly = True Then
       MsgBox "Die Datei wurde von einem anderen Benutzer geöffnet. Bitte versuchen Sie es später erneut.", vbInformation
       ActiveWorkbook.Close savechanges:=False
       Exit Sub
   End If
   varfile2 = ActiveWorkbook.Name
End Sub

Tipps für Profis

  • Verwende Application.DisplayAlerts = False: Dies kann nützlich sein, wenn Du mehrere Dateien öffnest und keine Bestätigungsdialoge sehen möchtest. Achte darauf, es wieder auf True zu setzen.

  • Error Handling Implementierung: Füge On Error Resume Next und On Error GoTo 0 hinzu, um sicherzustellen, dass Dein Makro nicht abstürzt, wenn unerwartete Fehler auftreten.


FAQ: Häufige Fragen

1. Was passiert, wenn ich die Datei nicht richtig schließe?
Wenn Du eine Datei nicht ordnungsgemäß schließt, bleibt sie im Speicher und kann von anderen Benutzern nicht bearbeitet werden.

2. Kann ich die Datei auch im schreibgeschützten Modus öffnen?
Ja, Du kannst die Datei im schreibgeschützten Modus öffnen. Stelle jedoch sicher, dass Du den Benutzer informierst, falls die Datei von jemand anderem verwendet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige