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

Forumthread: Schreibschutz durch Makro aufheben

Schreibschutz durch Makro aufheben
08.12.2006 12:47:13
Bernd
Hallo zusammen
Ich würde gerne in eine Arbeitsmappe folgend Funktionalität einbauen:
Die Arbeitsmappe soll Schreibgeschützt sein wenn sie mit deaktivierten Makros geöffnet wird.
Werden die Makros beim Öffnen aktiviert soll der Schreibschutz aufgehoben werden.
Ich habe es bisher so versucht daß ich ein Modul eingefügt habe in das ich die auto_open Prozedur wie folgt reingeschrieben habe:

Sub auto_open()
ActiveWorkbook.Unprotect password:="Test"
End Sub

Das funktioniert leider nicht. Es kommt zwar zu keiner Fehlermeldung doch die Arbeitsmappe bleibt auch mit aktivierten Makros schreibgeschützt.
Danke für alle Tips und Anregungen im Voraus.
Gruß Bernd
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 12:59:11
Andre´
Hallo Bernd,
bevor du die Mappe schließt folgendes in DieseArbeitsmappe einfügen

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Protect ("Test")
End Sub

MFG
Andre
AW: Schreibschutz durch Makro aufheben
08.12.2006 13:03:47
Andre´
Hallo Bernd,
Dein Makro muss in DieseArbeitsmappe, nicht in ein Modul!
MFG
Andre
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 13:17:27
Bernd
Hallo Andre
Dein erster Tip soll wenn ich das richtig seh einen Schreibschutz beim schliessen der Mappe einfügen. Das ist nicht mein Problem. Ich habe einen Schreibschutz den ich mittels eines Makros aufheben will.
Zu deinem zweiten Beitrag - Die auto_open Prozedur funktioniert nicht wenn man sie in DieseArbeitsmappe packt.
Gruß Bernd
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 13:41:07
Andre´
Hallo Bernd,
dieses in DieseArbeitsmappe

Private Sub Workbook_Open()
Worksheets("Tabelle1").Unprotect ("Test")'Schreibschutz für Tabelle1 aufheben
ActiveWorkbook.Unprotect (PW)'Arbeitsmappenschutz aufheben
End Sub

MFG
Andre
AW: Schreibschutz durch Makro aufheben
08.12.2006 13:43:57
Andre´
Sorry, Mappenschutz für deinen Fall natürlich so
ActiveWorkbook.Unprotect ("Test")'Arbeitsmappenschutz aufheben
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 14:14:04
Bernd
Danke André
Ich habe es tatsächlich hinbekommen, musste aber leider feststellen dass mein Problem doch komplizierter ist als ich zuerst dachte. Wenn jemand die Mappe mit aktivierten Makros öffnet sie dann speichert, beim Schliesen der Mappe jedoch auf nicht speichern klickt ist die Mappe beim nächsten öffnen ungeschützt ob mit Makro, oder nicht.
Ich fürcht eine wirkliche Lösung gibt es gar nicht.
Gruß Bernd
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 14:23:04
IngGi
Hallo Bernd,
dieses Problem läßt sich am Besten dadurch lösen, dass du in das Schließereignis eine automatische Speicherung der Mappe mit einprogrammierst, also in "DieseArbeitsmappe":

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub
Gruß Ingolf
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 14:30:37
Bernd
Hallo Ingolf
Ich habe schon fast auf diesen Vorschlag gewartet. Das kann man aber nicht machen. Man muss dem Anwender ja die Möglichkeit lassen die Arbeitsmappe zu schliessen ohne zu speichern falls er irgendwelche Fehler eingebaut hat die er nicht speicher will.
Gruß Bernd
AW: Schreibschutz durch Makro aufheben
08.12.2006 15:21:27
IngGi
Hallo Bernd,
eine Möglichkeit wäre noch, beim Öffnen eine temporäre Datei zu speichern, die bei jedem Speichern ebenfalls aktualisiert wird. Beim Schließen wird dann geprüft, ob die Datei seit der letzten Speicherung verändert wurde (ThisWorkbook.Saved = False). Falls ja, wird der Benutzer gefragt, ob er die Datei speichern will. Wenn ja, wird die Datei gespeichert, wenn nein, wird statt dessen die temporäre Datei, die ja den Zustand bei der letzten Speicherung enthält, unter dem Originaldateinamen gespeichert. In beiden Fällen wird natürlich die temporäre Datei anschließend gelöscht.
Gruß Ingolf
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 15:20:51
Matthias
Hallo Bernd,
nicht ganz das, was du möchtest, aber mit ähnlicher Funktionalität:

  1. erstelle ein Blatt namens "Warnung" (wenn du es anders nennen willst, musst du den Namen im u.a. Code anpassen
  2. gestalte das Blatt so, dass eine Info draufsteht, dass die Mappe mit deaktivierten Makros nicht funktioniert.
  3. kopiere folgenden Code ins Modul DieseArbeitsmappe:


Option Explicit
Const OhneMakros = "Warnung" 'Name des Blattes mit der Info
Const pwWarnung = "12345" 'Kennwort des Blattes mit der Info
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Me.Saved = False Then
Select Case MsgBox("Sollen Ihre Änderungen in '" & Me.Name & "' gespeichert werden?", vbYesNoCancel + vbExclamation)
Case vbYes
Speichern
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
If SaveAsUI Then
MsgBox "Speichern unter... nicht möglich!" 'müsste falls erforderlich noch erweitert werden
Else
Speichern
End If
End Sub
Private Sub Workbook_Open()
AllesEinblenden
On Error Resume Next
'beim Speichern gemerktes aktives Blatt anzeigen:
Sheets(Sheets(OhneMakros).Cells(Rows.Count, Columns.Count).Value).Activate
Me.Saved = True
End Sub
Private Sub AllesAusblenden()
Dim sh As Worksheet
Sheets(OhneMakros).Visible = True
For Each sh In Me.Worksheets
If sh.Name <> OhneMakros Then sh.Visible = xlSheetVeryHidden
Next sh
End Sub
Private Sub AllesEinblenden()
Dim sh As Worksheet
For Each sh In Me.Worksheets
sh.Visible = True
Next sh
Sheets(OhneMakros).Visible = xlSheetVeryHidden
End Sub
Private Sub Speichern()
Dim sh As Worksheet
Dim fehler As Boolean
Set sh = ActiveSheet
'geöffnetes Blatt merken:
With Sheets(OhneMakros)
.Unprotect Password:=pwWarnung
.Cells(Rows.Count, Columns.Count) = sh.Name
.Protect Password:=pwWarnung
End With
Application.EnableEvents = False
Application.ScreenUpdating = False
AllesAusblenden
On Error Resume Next
Me.Save
If Err.Number > 0 Then
MsgBox Err.Description, , "Fehler " & Err.Number
fehler = True
End If
On Error GoTo 0
AllesEinblenden
sh.Activate
Application.EnableEvents = True
Application.ScreenUpdating = True
If Not fehler Then Me.Saved = True
End Sub

Gruß Matthias
Anzeige
AW: Schreibschutz durch Makro aufheben
08.12.2006 16:39:03
Bernd
Danke Mathias, Danke Ingolf
Werde mir eure beiden Vorschläge mal anschauen und testen. Macht auf jeden Fall schon mal Hoffnung.
Gruß Bernd

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Schreibschutz durch Makro aufheben in Excel


Schritt-für-Schritt-Anleitung

Um den Schreibschutz in Excel durch ein Makro aufzuheben, kannst Du die folgenden Schritte befolgen. Diese Anleitung geht davon aus, dass Du grundlegende Kenntnisse in VBA (Visual Basic for Applications) hast.

  1. Öffne die Excel-Datei, die Du bearbeiten möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.
  4. Füge den folgenden Code in das Modul ein:

    Sub auto_open()
       ActiveWorkbook.Unprotect Password:="Test" ' Passwort für den Schutz
    End Sub
  5. Um den Blattschutz aufzuheben, füge den folgenden Code in das Modul "DieseArbeitsmappe" ein:

    Private Sub Workbook_Open()
       Worksheets("Tabelle1").Unprotect Password:="Test" ' Blattschutz aufheben
       ActiveWorkbook.Unprotect Password:="Test" ' Arbeitsmappenschutz aufheben
    End Sub
  6. Speichere die Änderungen und schließe den VBA-Editor.

  7. Schließe die Excel-Datei und öffne sie erneut, um die Änderungen zu testen.


Häufige Fehler und Lösungen

  • Fehler: "Die Arbeitsmappe bleibt schreibgeschützt"

    • Lösung: Stelle sicher, dass der Code in "DieseArbeitsmappe" und nicht in einem allgemeinen Modul eingefügt wurde.
  • Fehler: "Passwort falsch"

    • Lösung: Überprüfe, ob das verwendete Passwort korrekt ist. Es muss genau mit dem Passwort übereinstimmen, das beim Setzen des Schutzes verwendet wurde.
  • Fehler: "Der Blattschutz kann nicht aufgehoben werden"

    • Lösung: Stelle sicher, dass das Blatt tatsächlich geschützt ist und das richtige Blatt referenziert wird.

Alternative Methoden

Wenn Du den Schreibschutz umgehst, ohne VBA zu verwenden, kannst Du Folgendes tun:

  1. Schutz manuell aufheben:

    • Gehe zu "Überprüfen" > "Blattschutz aufheben" und gib das Passwort ein.
  2. Excel-Datei kopieren:

    • Erstelle eine Kopie der Arbeitsmappe und entferne den Schutz in der Kopie.
  3. Verwendung von Excel-Funktionen:

    • Erstelle eine neue Arbeitsmappe und kopiere die Daten aus der geschützten Datei.

Praktische Beispiele

Hier sind einige Beispiele zur Verwendung von VBA zur Aufhebung des Schreibschutzes:

  • Beispiel 1: Blattschutz aufheben mit einem Button

    Sub BlattschutzAufheben()
       Worksheets("Tabelle1").Unprotect Password:="Test"
    End Sub
  • Beispiel 2: Automatisches Speichern vor dem Schließen

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       If Not Me.Saved Then
           If MsgBox("Änderungen speichern?", vbYesNo) = vbYes Then
               Me.Save
           End If
       End If
    End Sub

Tipps für Profis

  • Verwende Variablen für Passwörter: Um die Wartbarkeit des Codes zu erhöhen, speichere Passwörter in Variablen.

    Dim pw As String
    pw = "Test"
    ActiveWorkbook.Unprotect Password:=pw
  • Fehlerbehandlung einbauen: Nutze On Error Resume Next, um den Code robuster zu machen und Fehler zu ignorieren.

    On Error Resume Next
    Worksheets("Tabelle1").Unprotect Password:="Test"
  • Dokumentation: Kommentiere Deinen Code gut, um die Nachvollziehbarkeit zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich den Blattschutz in Excel ohne VBA aufheben? Du kannst den Blattschutz manuell aufheben, indem Du zu "Überprüfen" > "Blattschutz aufheben" gehst und das Passwort eingibst.

2. Was passiert, wenn ich die Datei ohne zu speichern schließe? Wenn Du die Datei ohne zu speichern schließt, bleibt der Schreibschutz bestehen. Bei aktivierten Makros wird der Schutz jedoch beim nächsten Öffnen aufgehoben, wenn der entsprechende Code ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige