Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen ob dieselbe Datei bereits geöffnet ist

Prüfen ob dieselbe Datei bereits geöffnet ist
Markus
Hallo liebe Forumsmitglieder,
hab schon viele gute und hilfreiche Beiträge aus diesem Forum finden können...
Nun stehe ich vor einem Problem, wo ich bereits 3 Tage lang keine für mich zufriedenstellende Lösung finden konnte!
Ich möchte eine Datei in einem Netzwerk öffnen... Diese Datei verwenden mehrere User...
Nun soll über Workbook_Open() - in der selben Datei- geprüft werden, ob diese Datei, also die ich gerade öffne bereits durch einen anderen User verwendet wird! Das schwierige Dabei ist es die Datei die ich gerade öffne selber zu prüfen, da ich aus keiner Schaltfläche oder einer anderen Datei diese Datei öffne!
Nun kommt aber noch was: Die Meldung: Dokument wird bereits verwendet...
soll unterdrückt werden, das geht nicht mit Application.DisplayAlert = False! Wenn die Datei im ReadOnly-Modus ist soll sie direkt ohne MS-Prüfung, ob Sie bereits verwendet wird in den ReadOnly - Schreibschutzmodus geöffnet werden, und dann mittels eigner Messageboxen den User darüber informieren, dass die Datei durch den User: xxx verwendet wird und dann soll die Datei geschlossen werden, ohne Speicherung und auch das Makro Workbook BeforeClose() soll nicht ausgeführt werden!
Ich hoffe es kann mir jemand helfen... vielen Dank schon mal!
Markus
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Prüfen ob dieselbe Datei bereits geöffnet ist
11.01.2010 11:51:36
JoWE
Markus,
ich hatte da mal was gefunden, weiß nicht mehr wo und von wem:
Sub YourMacro()
Dim strFileName As String
strFileName = "C:\TestDir\TestFile.xls"
If Not FileLocked(strFileName) Then
Documents.Open strFileName
End If
End Sub


Function FileLocked(strFileName As String) As Boolean
On Error Resume Next
Open strFileName For Binary Access Read Write Lock Read Write As #1
Close #1
If Err.Number  0 Then
MsgBox "Error #" & Str(Err.Number) & " - " & Err.Description & vbCr & "File is already  _
in use!"
FileLocked = True
Err.Clear
End If
End Function
Gruß
Jochen
Anzeige
AW: Prüfen ob dieselbe Datei bereits geöffnet ist
11.01.2010 13:03:32
Markus
Hallo Jochen, danke für Deine Nachricht,
leider ist es so, dass ich wie auch bei meinen bisherigen Versuchen, die Datei geschlossen wird, die ich gerade öffne, da geprüft wird, ob die Datei auf die ich gerade zugreife auch geöffnet ist....
So wird die Datei beim öffnen direkt wieder geschlossen!
Hat jemand noch eine Idee?
Anzeige
AW: Prüfen ob dieselbe Datei bereits geöffnet ist
12.01.2010 14:05:53
MB
Ich glaube die Meldung Dokument wird verwendet...
kann man, wenn man die zu öffnende Datei anklickt nicht unterbinden,
Ich mach es jetzt über:
If ActiveWorkbook.ReadOnly = True Then
Aktiver = ActiveWorkbook.WriteReservedBy
MsgBox "Benutzt von " & Aktiver
MsgBox "Bitte versuchen Sie es später wieder!"
ActiveWorkbook.Close savechanges:=False
Exit Sub
End If
End Sub
Wenn jemand noch ne Idee hat, wäre ich ihm dankbar!
VG Markus
Anzeige
AW: Prüfen ob dieselbe Datei bereits geöffnet ist
12.01.2010 22:41:17
Markus
Den einzigen Code um die Meldung zu unterdrücken:
.VBA-Code #1
Public Sub RunExcelWithoutAddIns1()
Shell """C:\Programme\Microsoft Office\Office\Excel.exe"" /automation", vbNormalFocus
End Sub
.VBA-Code #2
Public Sub RunExcelWithoutAddIns2()
CreateObject("WScript.Shell").Run "Excel.exe /automation", vbNormalFocus
End Sub
kann ich nicht einbauen....
Habe jetzt folgende Variante verwendet:
Public Sub starte_Datei()
ActiveWindow.WindowState = xlMinimized
Dim cb As Workbook
Dim strDatei As String, strUsername, test
Set cb = ActiveWorkbook
strDatei = cb.Path & "\user.txt"
If cb.ReadOnly = True Then
Open strDatei For Input As #1
Line Input #1, strUsername
MsgBox "Aus Gründen des Datenverlustes wird die Datei geschlossen!" & Chr(13) & "Bitte  _
warten Sie bis " & _
"Benutzer/in " & _
strUsername _
& " die Datei geschlossen hat!", _
vbOKOnly + vbInformation, _
"Hinweis:"
cb.Close (False)
Exit Sub
'MsgBox "Datei wird gerade bearbeitet von " & strUsername, vbCritical, "Bitte beachten"
Else
ActiveWindow.WindowState = xlMaximized
Close #1
Open strDatei For Output As #1
Print #1, Environ("Username")
End If
Close #1
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Prüfen ob dieselbe Datei bereits geöffnet ist


Schritt-für-Schritt-Anleitung

Um zu prüfen, ob eine Excel-Datei bereits von einem anderen Benutzer geöffnet ist, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, um dies zu erreichen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)".
    • Wähle Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein:

    Sub PrüfenObDateiGeöffnet()
       Dim strFileName As String
       strFileName = "C:\DeinPfad\DeineDatei.xlsx"
    
       If Not FileLocked(strFileName) Then
           Workbooks.Open strFileName
       End If
    End Sub
    
    Function FileLocked(strFileName As String) As Boolean
       On Error Resume Next
       Open strFileName For Binary Access Read Write Lock Read Write As #1
       Close #1
       If Err.Number <> 0 Then
           MsgBox "Die Datei wird bereits verwendet!"
           FileLocked = True
           Err.Clear
       End If
    End Function
  4. Schließe den VBA-Editor und teste das Makro.


Häufige Fehler und Lösungen

  • Fehler: Datei wird sofort geschlossen:

    • Stelle sicher, dass du den FileLocked-Test nicht auf die Datei anwendest, die du gerade öffnest. Dies kann dazu führen, dass Excel die Datei sofort schließt. Überprüfe die Logik in deinem Code.
  • Meldung „Dokument wird bereits verwendet“:

    • Diese Meldung kann nicht immer mit Application.DisplayAlerts = False unterdrückt werden. Stattdessen kannst du die Datei im ReadOnly-Modus öffnen und den Benutzer mit einer MessageBox informieren.

Alternative Methoden

Wenn du nicht auf VBA zurückgreifen möchtest, kannst du die Excel-Funktionalitäten nutzen, um zu sehen, wer eine Datei in SharePoint geöffnet hat. Gehe dazu wie folgt vor:

  1. Navigiere zu SharePoint und öffne die Dokumentbibliothek.
  2. Suche die Datei und klicke auf die drei Punkte (…).
  3. Wähle „Details“ aus, um zu sehen, welche Benutzer die Datei geöffnet haben.

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du den VBA-Code anpassen kannst:

  1. Meldung des Benutzernamens:

    If ActiveWorkbook.ReadOnly = True Then
       Dim Aktiver As String
       Aktiver = ActiveWorkbook.WriteReservedBy
       MsgBox "Die Datei wird gerade genutzt von " & Aktiver
    End If
  2. Schließen der Datei:

    If cb.ReadOnly = True Then
       MsgBox "Die Datei wird von einem anderen Benutzer verwendet. Sie wird nun geschlossen."
       cb.Close savechanges:=False
    End If

Tipps für Profis

  • Verwende Workbook_Open: Du kannst den Code in das ThisWorkbook-Modul einsetzen, um die Prüfung automatisch beim Öffnen der Datei durchzuführen.

  • Debugging: Wenn du auf Probleme stößt, füge Debug.Print-Anweisungen hinzu, um den Fluss deines Codes zu überwachen.

  • Optimierung: Überlege, den Code in eine Funktion umzuwandeln, die du bei Bedarf wiederverwenden kannst.


FAQ: Häufige Fragen

1. Wie kann ich sehen, wer die Datei geöffnet hat?
Du kannst die SharePoint-Funktionalität nutzen, um herauszufinden, wer die Datei geöffnet hat. In Excel selbst gibt es leider keine direkte Möglichkeit, dies in einem Netzwerk zu prüfen.

2. Was passiert, wenn ich den Code falsch implementiere?
Wenn der Code nicht korrekt implementiert ist, kann es passieren, dass die Datei bei jedem Öffnen sofort geschlossen wird. Überprüfe deine Bedingungen und stelle sicher, dass du die richtige Datei referenzierst.

3. Kann ich den Code auch in Excel für Mac verwenden?
Ja, VBA funktioniert auch in Excel für Mac, jedoch können einige Pfadangaben unterschiedlich sein. Achte darauf, den richtigen Pfad zu deiner Datei zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige