Makros nur ausführen, wenn die Datei nicht schreibgeschützt ist
Schritt-für-Schritt-Anleitung
- Modul erstellen: Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu.
- Statusvariable definieren: Füge den folgenden Code in das Modul ein:
Public ReadGlobalState As Boolean
- Workbook_Open-Ereignis: Gehe zu
ThisWorkbook
und füge den folgenden Code ein:
Private Sub Workbook_Open()
If ThisWorkbook.ReadOnly = True Then
ReadGlobalState = True
Else
ReadGlobalState = False
End If
End Sub
- Makros anpassen: In jedes Makro, das du erstellt hast, füge folgende Zeile am Anfang ein:
If ReadGlobalState = True Then Exit Sub
- Testen: Speichere die Datei und öffne sie schreibgeschützt, um sicherzustellen, dass die Makros nicht ausgeführt werden.
Häufige Fehler und Lösungen
-
Fehler beim Kompilieren: außerhalb einer Prozedur ungültig:
Dieser Fehler tritt auf, wenn du den Code außerhalb einer Sub-Prozedur einfügst. Stelle sicher, dass der Code innerhalb einer Sub
oder Function
steht.
-
Variable nicht definiert:
Wenn du ReadGlobalState
in einem Makro verwendest, stelle sicher, dass die Variable im Modul als Public
deklariert ist.
-
Excel-Datei wird als schreibgeschützt angezeigt, obwohl nicht geöffnet:
Überprüfe, ob die Datei tatsächlich von einem anderen Benutzer geöffnet ist oder ob sie auf einem Server im schreibgeschützten Modus gespeichert ist.
Alternative Methoden
Eine alternative Methode, um Makros nur bei nicht schreibgeschützten Dateien auszuführen, ist die Verwendung von Application.DisplayAlerts
. Damit kannst du Benutzern eine Warnung anzeigen lassen, bevor sie versuchen, Änderungen an einer schreibgeschützten Datei vorzunehmen.
If ThisWorkbook.ReadOnly Then
Application.DisplayAlerts = True
MsgBox "Diese Datei ist schreibgeschützt - Änderungen können nicht gespeichert werden."
End If
Praktische Beispiele
Hier ist ein Beispielcode, der Benutzername und Datum/Zeit der letzten Änderung in bestimmten Zellen protokolliert:
Private Sub Worksheet_Change(ByVal Target As Range)
If ReadGlobalState = True Then Exit Sub
If Target.Column = 1 Or Target.Column = 10 Then
Cells(Target.Row, 15) = Date
Cells(Target.Row, 16) = Time
Cells(Target.Row, 14) = Environ("Username")
End If
End Sub
In diesem Beispiel wird nur bei Änderungen in den Spalten 1 und 10 protokolliert.
Tipps für Profis
- Code modularisieren: Halte deinen VBA-Code modular, indem du häufig verwendete Funktionen in separate Sub-Prozeduren auslagerst.
- Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um unerwartete Fehler elegant zu handhaben.
- Dokumentation: Kommentiere deinen Code ausreichend, damit auch andere Benutzer verstehen, was der Code macht.
FAQ: Häufige Fragen
1. Wie kann ich verhindern, dass Excel-Makros ausgeführt werden, wenn die Datei schreibgeschützt ist?
Durch die Verwendung der Statusvariable ReadGlobalState
und das Einfügen einer Überprüfung am Anfang jedes Makros kannst du dies erreichen.
2. Was bedeutet "schreibgeschützter Kontakt"?
In Excel bezieht sich der Begriff "schreibgeschützt" auf Dateien, die nicht bearbeitet werden können, weil sie bereits von einem anderen Benutzer geöffnet sind oder auf einem Server im schreibgeschützten Modus gespeichert wurden.