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

Forumthread: Datei - Schreibschutz aufheben und wieder setzen

Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 13:58:52
Andreas
Hallo Excelprofis,
Über eine Schaltfläche werden alle Zeilen eines Bereiches eingeblendet und alle in Spalte A leeren Zeilen wieder ausgeblendet. Dies hat den Hintergrund, dass die Tabelle Verknüpfungen zu anderen Mappen enthält. Wenn in den Ursprungsmappen Zeilen gelöscht oder hinzugeügt werden, kann man sich schnell einen Überblick verschaffen.
Zum Schluß wird die Datei noch gespeichert.
Das funktioniert auch super.
Aus Gründen, auf die ich hier nicht weiter eingehen will, macht es sich erforderlich die Datei schreibgeschützt zu machen (also unter Datei-Eigenschaften - Schreibgeschützt).
Geht es, dass der Schreibschutz vor ausführen dieses Makros entfernt und nach dem speichern wieder gesetzt wird? So wie ich es probiert habe gehts wohl nicht (siehe auskommentierte Zeilen).
Option Private Module
Sub EinAusblendenLangsam()
Dim zelle As Range
Dim bereich As Range
Set bereich = ActiveSheet.Range("A8:A397")
ActiveSheet.Unprotect Password:="Passwort"
Application.ScreenUpdating = False
Application.EnableEvents = False
'ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
bereich.EntireRow.Hidden = True
For Each zelle In bereich
If zelle  "" Then
'Call FilternBereich
zelle.EntireRow.Hidden = False
End If
Next
ActiveSheet.Protect Password:="Passwort"
ActiveWorkbook.Save
'ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, notify:=True
Application.ScreenUpdating = True
Application.EnableEvents = True
Range("A6").Select
End Sub
Danke fürs lesen und die Hilfe!
mfg, Andreas

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 14:31:36
fcs
Hallo Andreas,
wenn die Datei unter dem gleichen Namen (Pfad+Dateiname!!) wieder gespeichert werden soll, dann muss schon beim Öffnen der Datei das Kennwort zum Ändern/Schreiben angegeben werden.
Falls die Datei per Makro von einer anderen Datei aus geöffnet wird, dann kann man das entsprechende Kennwort mit übergeben.
Dann sollte man das Öffnen-Makro aber so konfigurieren, dass:
- Die Datei mit Schreibkennwort geöffnet wird
- Das Makro ausführt, wenn die Datei nicht schreibgeschützt ist
- Die Datei gespeichert und geschlossen wird
- Die Datei schreibgeschützt geöffnet wird, ohne das das Makro ausgeführt wird.
Gruß
Franz

Anzeige
AW: Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 14:43:32
Andreas
Hallo Franz,
Danke für die Antwort. Ich glaube, ich habe mich nicht ganz verständlich ausgedrückt. Ich meine nicht den Arbeitsmappenschutz oder Blattschutz, sondern die Dateieigenschaft "Schreibgeschützt".
Ich stelle die Datei unter anderem mit folgenden Code auf "nur lesen" und möchte die Datei aber dennoch mit oben genannter Schaltfläche (aber nur mit dieser) speichern und dann wieder auf "nur lesen" stellen. Ich habe noch ein anderes Makro das die Speicherabfrage vor dem schließen der Mappe verhindert, wenn die Mappe "Schreibgeschützt" ist.
Option Explicit
Private Sub Workbook_Open()
If IsDate(Worksheets("Übersicht").Range("J1")) Then
If Month(Worksheets("Übersicht").Range("J1"))  Month(Date) And Worksheets("Übersicht")  _
_
.Range("J1")  "" Then
Meldung
End If
Else
Meldung
End If
On Error Resume Next
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, notify:=True
On Error GoTo 0
End Sub
mfg, Andreas

Anzeige
AW: Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 15:07:17
Daniel
Hi
das Aufheben des Schreibschutzes mit:
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
bewirkt, dass die Datei neu gelesen wird (könnte ja sein, dass zwischenzeitlich jemand anderes die Datei ohne Schreibschutz geöffnet und verändert hat).
Damit stoppt nach dieser Befehlszeile jegliche Makroaktivität!
der Workaround ist folgendes Vorgehen:
1. Schreibe 2 Makros.
Das erste endet mit dem Aufheben des Schreibschutzes und enthält alle Befehle, die davor ausgeführt werden müssen
Das zweite enthält alle Makors, die danach ausgeführt werden sollen
2. Starte das Makro2 aus dem ersten heraus mit dem Befehl: Application.Ontime
den Merker für das Ausführen eines über Application.Ontime gestarteten Makros setzt sich Excel in der Excelapplication selbst und nicht in der Datei und ist daher in der Lage, das Makro auszuführen wenn die Datei zwischenzeitlich geschlossen wurde (sie wird dann wieder geöffnet):
Sub Makro1()
Application.Ontime Now, Makro2
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
End Sub
Sub Makro2()
hier dann der weitere Code
End Sub
Gruß Daniel

Anzeige
AW: Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 15:31:43
Andreas
Hallo Daniel,
Danke für die Hilfe! Habe es jetzt so, erscheint aber eine Fehlermeldung:
Fehler beim Kombilieren: Function oder Variable erwartet.
"Wenn ich "Application.OnTime Now, EinAusblendenLangsam" auskommentiere, funktioniert das entfernen des Schreibschutzes ohne Meldung."

Sub Schreib_Lesestatus_Ändern()
On Error Resume Next
Application.OnTime Now, EinAusblendenLangsam
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
On Error GoTo 0
End Sub


Sub EinAusblendenLangsam()
Dim zelle As Range
Dim bereich As Range
Set bereich = ActiveSheet.Range("A8:A397")
ActiveSheet.Unprotect Password:=""
'Bildschirmflackern ausschalten, Trigger ausschalten
Application.ScreenUpdating = False
Application.EnableEvents = False
'ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
'alle Zeilen einblenden
bereich.EntireRow.Hidden = True
'jede Zeile prüfen
For Each zelle In bereich
'wenn Zelleninhalt null, dann diese Zeile ausblenden
If zelle  "" Then
'Call FilternBereich
zelle.EntireRow.Hidden = False
End If
Next
ActiveSheet.Protect Password:=""
ActiveWorkbook.Save
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, notify:=True
Application.ScreenUpdating = True
Application.EnableEvents = True
Range("A6").Select
End Sub
Danke für die Mühe!
mfg, Andreas

Anzeige
AW: Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 15:48:47
Daniel
Hi
bei Application.OnTime wird der der Name des aufgerufenen Makros in Anführungszeichen gesetzt (ähnlich wie bei Application.Run)
du solltest, wenn du hier einen neuen Befehl kennen lernst, immer auch mal parallel in der Hilfe schauen, was die dazu zu sagen hat.
Hier im Forum schreibt man doch nicht immer alles ganz so genau hin (ausserdem stehts ja in der Hilfe)
Gruß Daniel

Anzeige
AW: Datei - Schreibschutz aufheben und wieder setzen
18.07.2014 15:49:38
fcs
Hallo Andreas,
der Name des Makros bei OnTime muss in Anführungszeichen gesetzt werden oder eine Variable sein. Evtl. auch noch etwas Wartezeit zugeben.
Allerdings hab ich noch nie getestet, ob man so tatsächlich vorübergehend den Schreibschutz deaktivieren kann.
Bei meiner vorherigen Anwort ging es schon um das Kennwort beim Speichern/Öffnen der Datei
Gruß
Franz
Sub Schreib_Lesestatus_Ändern()
On Error Resume Next
Application.OnTime Now + TimeSerial(0,0,1), "EinAusblendenLangsam"
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
On Error GoTo 0
End Sub

Anzeige
geht wohl nicht so richtig
18.07.2014 16:19:00
Andreas
Hallo Ihr beiden,
Danke für die Hilfe. Schreibschutz entfernen funktioniert genau 1mal. Wenn ich mehrfach auf die Schaltfläche klicke kommen erneut Meldungen, dass die Datei schon exixtiert. Ich denke mal ich werde es anders lösen.
Ein schönes WE.
mfg, Andreas

AW: geht wohl nicht so richtig
18.07.2014 16:23:58
Daniel
Das ist keine Fehlermeldung, sondern eine normale Meldung von Excel, weil Excel vor aktivierung des Schreibschutzes die Datei nochmal speichern will und sie schon existiert.
solche Meldungen kannst du mit Application.DisplayAlerts = False unterdrücken (dann wird die Option ausgeführt, die standardmäßig eingestellt ist).
Gruß Daniel

Anzeige
Jetzt funktionierts. Danke! schönes WE! owT.
18.07.2014 16:35:13
Andreas
.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Schreibschutz in Excel: Aufheben und Wiederherstellen


Schritt-für-Schritt-Anleitung

  1. Öffne Deine Excel-Datei: Stelle sicher, dass die Datei, die Du bearbeiten möchtest, nicht schreibgeschützt ist.
  2. Entferne den Schreibschutz: Verwende den folgenden VBA-Code, um den Schreibschutz aufzuheben:
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
  3. Führe Deine Änderungen durch: Bearbeite die gewünschten Bereiche in Deiner Excel-Datei.
  4. Speichere die Datei: Speichere die Änderungen mit ActiveWorkbook.Save.
  5. Setze den Schreibschutz wieder: Verwende diesen Code, um die Datei wieder schreibgeschützt zu machen:
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, notify:=True
  6. Schließe die Datei: Achte darauf, dass die Datei nun schreibgeschützt ist.

Häufige Fehler und Lösungen

  • Fehler: Datei ist schreibgeschützt: Wenn Du versuchst, Änderungen vorzunehmen und erhältst die Fehlermeldung, dass die Datei schreibgeschützt ist, stelle sicher, dass Du den Schreibschutz tatsächlich mit ChangeFileAccess entfernt hast.

  • Fehler: Fehlermeldung beim Speichern: Wenn Du eine Fehlermeldung erhältst, dass die Datei bereits existiert, kannst Du dies mit dem Befehl Application.DisplayAlerts = False unterdrücken.

  • Fehler: Makro läuft nicht: Wenn Dein Makro nicht wie gewünscht funktioniert, prüfe, ob es korrekt in Anführungszeichen gesetzt ist, insbesondere bei Verwendung von Application.OnTime.


Alternative Methoden

  • Blattschutz aufheben: Um den Blattschutz zu entfernen, kannst Du den folgenden VBA-Befehl verwenden:

    ActiveSheet.Unprotect Password:="DeinPasswort"
  • Datei als schreibgeschützt speichern: Um die Datei von Anfang an als schreibgeschützt zu speichern, kannst Du die Dateieigenschaften direkt beim Speichern einstellen. Nutze hierfür:

    ActiveWorkbook.SaveAs Filename:="DeinDateiname.xlsx", AccessMode:=xlNoChange

Praktische Beispiele

  1. Makro zum Aufheben des Schreibschutzes:

    Sub SchreibschutzAufheben()
        On Error Resume Next
        ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, notify:=True
        ' Weitere Änderungen hier
        ActiveWorkbook.Save
        ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, notify:=True
    End Sub
  2. Makro mit Blattschutz:

    Sub BlattschutzEntfernen()
        ActiveSheet.Unprotect Password:="DeinPasswort"
        ' Änderungen
        ActiveSheet.Protect Password:="DeinPasswort"
    End Sub

Tipps für Profis

  • Verwende On Error: Nutze On Error Resume Next, um sicherzustellen, dass das Makro auch bei Fehlern weiterhin ausgeführt wird.

  • Timing mit Application.OnTime: Wenn Du ein Makro nach einer bestimmten Zeit ausführen möchtest, setze den Namen des Makros in Anführungszeichen in der Application.OnTime Methode.

  • Kombiniere mehrere Makros: Du kannst verschiedene Makros in einer Routine kombinieren, um den Prozess des Schreibschutzes zu automatisieren.


FAQ: Häufige Fragen

1. Wie kann ich den Schreibschutz in Excel dauerhaft aufheben?
Um den Schreibschutz dauerhaft aufzuheben, musst Du die Datei ohne den Schreibschutz speichern, indem Du ChangeFileAccess nicht mehr verwendest.

2. Kann ich den Schreibschutz ohne Passwort aufheben?
Falls Du den Blattschutz oder die Datei mit einem Passwort geschützt hast, benötigst Du das Passwort, um den Schutz aufzuheben. Es gibt keine Möglichkeit, dies zu umgehen, ohne das Passwort zu kennen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige