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

Schreibschutz per VBA abfragen/abfangen

Forumthread: Schreibschutz per VBA abfragen/abfangen

Schreibschutz per VBA abfragen/abfangen
09.01.2005 20:35:36
Frank
Hallo,
ich habe ein Excel-Workbook, das von bis zu 116 Usern (hoffentlich niemals gleichzeitig - wer weiß, was dann passiert) benutzt wird. Obwohl es freigegeben ist, kommt es hin und wieder vor, dass die bei nicht freigegebenen Workbooks übliche Frage "...wird von einem anderen Benutzer verwendet. Wollen Sie ... schreibgeschützt öffnen, benachrichtigt werden..." oder so ähnlich erscheint. Das passiert dann, wenn ein User die Datei gerade in der "Öffnungsphase" ist und ein zweiter User das Workbook öffnen möchte.
Da sehr viele unerfahrene User die Datei benutzen, möchte ich verhindern, dass diese Meldung erscheint und zur Verwirrung führt.
Ich habe nun vor, diese Abfrage nach "schreibgeschützt öffnen oder benachrichtigen" im Arbeitsmappen-Modul abzufangen und über eine "Wait-Schleife" den zweiten User hinten anzustellen (vordrängeln gibt's nicht ;-) ).
Hat jemand eine Idee, wie dies umgesetzt werden kann? Oder hat jemand eine Idee, anders vorzugehen?
Vielen Dank.
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibschutz per VBA abfragen/abfangen
09.01.2005 21:20:17
Frank
Hallo,
ich - der Fragesteller - bin's noch einmal:
zur Ergänzung: bei dem Dialog, den ich ausschalten bzw. abfangen möchte, geht es um die sog. Dateireservierung.
AW: Schreibschutz per VBA abfragen/abfangen
Ramses
Hallo
bei VBA Gut kannst du das sicher umsetzen.
Notfalls eine Do-While Schleife drumrum ;-)
Das Makro prüft vor dem definitiven Öffnen ob die Datei problemlos geöffnet werden kann.
Sub TestFileOpen()
Dim isOpen As Integer
Dim strFile As String
strFile = Application.GetOpenFilename("EXCEL Files *.xls, *.xls")
If strFile = "" Then Exit Sub
isOpen = TestOpen(strFile)
Select Case isOpen
Case 0: MsgBox "Datei " & strFile & " ist frei"
Case 1: MsgBox "Datei " & strFile & " ist geöffnet"
Case 2: MsgBox "Datei " & strFile & " wurde nicht gefunden"
End Select
End Sub

Private Function TestOpen(strFilePath As String) As Integer
If Dir(strFilePath) = "" Then
TestOpen = 2
Else
On Error GoTo errorhandler
Open strFilePath For Random Access Read Lock Read Write As #1
Close #1
End If
errorhandler:
If Err = 70 Then TestOpen = 1
End Function

Gruss Rainer
Anzeige
;
Anzeige

Infobox / Tutorial

Schreibschutz in Excel per VBA abfragen und abfangen


Schritt-für-Schritt-Anleitung

Um die Abfrage "schreibgeschützt öffnen" in Excel zu verhindern, kannst du ein VBA-Makro nutzen, das vor dem Öffnen der Datei prüft, ob sie bereits in Benutzung ist. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu, indem du im Menü auf Einfügen > Modul klickst.

  3. Kopiere folgenden Code in das Modul:

    Sub TestFileOpen()
       Dim isOpen As Integer
       Dim strFile As String
       strFile = Application.GetOpenFilename("EXCEL Files *.xls, *.xls")
       If strFile = "" Then Exit Sub
       isOpen = TestOpen(strFile)
       Select Case isOpen
           Case 0: MsgBox "Datei " & strFile & " ist frei"
           Case 1: MsgBox "Datei " & strFile & " ist geöffnet"
           Case 2: MsgBox "Datei " & strFile & " wurde nicht gefunden"
       End Select
    End Sub
    
    Private Function TestOpen(strFilePath As String) As Integer
       If Dir(strFilePath) = "" Then
           TestOpen = 2
       Else
           On Error GoTo errorhandler
           Open strFilePath For Random Access Read Lock Read Write As #1
           Close #1
       End If
    errorhandler:
       If Err = 70 Then TestOpen = 1
    End Function
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, um zu prüfen, ob die Datei schreibgeschützt geöffnet werden kann.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"
    Lösung: Stelle sicher, dass der Pfad zur Datei korrekt ist und die Datei existiert.

  • Fehler: "Zugriffsverletzung"
    Lösung: Überprüfe, ob die Datei von einem anderen Benutzer geöffnet ist. Das Makro erkennt dies und gibt die passende Meldung aus.

  • Fehler: Keine Reaktion beim Öffnen
    Lösung: Die GetOpenFilename-Methode könnte blockiert sein. Stelle sicher, dass keine Dialoge im Hintergrund aktiv sind.


Alternative Methoden

Eine weitere Möglichkeit, die Abfrage "schreibgeschützt öffnen" zu umgehen, ist die Verwendung von Workbook_Open-Ereignissen. Hier kannst du den Status der Datei direkt beim Öffnen abfragen.

Private Sub Workbook_Open()
    If IsWorkbookOpen(ThisWorkbook.Name) Then
        MsgBox "Die Datei ist bereits geöffnet."
        ThisWorkbook.Close False ' Schließe die Datei ohne Speichern
    End If
End Sub

Function IsWorkbookOpen(wbName As String) As Boolean
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(wbName)
    IsWorkbookOpen = Not wb Is Nothing
    On Error GoTo 0
End Function

Praktische Beispiele

Hier sind einige praktische Szenarien, in denen du die Excel-Abfrage "schreibgeschützt öffnen" abfangen kannst:

  1. Multi-User-Umgebung: Bei der Verwendung in einem Team mit mehreren Benutzern kann der Code helfen, Verwirrung zu vermeiden.
  2. Automatisierte Berichterstellung: Wenn Reports regelmäßig geöffnet werden müssen, kann das Makro sicherstellen, dass nur eine Instanz der Datei geöffnet wird.
  3. Datenvalidierung: Verwende das Makro, um sicherzustellen, dass Daten nur in einer nicht schreibgeschützten Umgebung bearbeitet werden.

Tipps für Profis

  • Verwende Do-While-Schleifen, um Nutzer in einer Warteschlange zu halten, während sie auf den Zugriff auf die Datei warten.
  • Optimierung: Füge Logging-Funktionalitäten hinzu, um die Nutzung der Datei zu überwachen und mögliche Probleme frühzeitig zu erkennen.
  • Sichere deine Makros mit einem Passwort, um unbefugten Zugriff auf den VBA-Code zu verhindern.

FAQ: Häufige Fragen

1. Kann ich auch andere Dateiformate abfragen?
Ja, du kannst die Filteroption in der GetOpenFilename-Methode anpassen, um andere Formate wie .xlsx oder .xlsm einzuschließen.

2. Was passiert, wenn mehrere Benutzer gleichzeitig versuchen, die Datei zu öffnen?
Das Makro wird den zweiten Benutzer informieren, dass die Datei bereits geöffnet ist, und ihm die Möglichkeit geben, entweder zu warten oder die Datei nicht zu öffnen.

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