Herbers Excel-Forum - das Archiv

Schreibschutz per VBA setzen

Bild

Betrifft: Schreibschutz per VBA setzen
von: Volker Theisinger

Geschrieben am: 09.01.2007 10:45:05
Hallo,
ich habe eine Frage und hoffe bei einem Experten Hilfe zu finden:
Ich habe eine Excel-Datei für die ich auf ganz normalem Weg ein Schreibschutzkennwort vergeben habe. Das hat logischerweise zur Folge, dass jeder, der die Datei öffnet, die Möglichkeit hat das Kennwort einzugeben oder den Button "schreibschutz" zu drücken. Ich möchte aber, dass bei allen Personen, die nicht einer vorher definierten Gruppe angehören, der Schreibschutz automatisch gesetzt wird, wenn die Datei startet. Er soll nichts mehr drücken müssen.
Mein Weg wäre per "...workbook open..." den angemeldeten Benutzer zu überprüfen (wie das geht ist mir bekannt) und dann für alle die, die nicht einer bestimmten Gruppe angehören den Schreibschutz per VBA zu aktivieren. Und genau da bräuchte ich Hilfe. Konkret: Mit welchem VBA-Befehl aktiviere ich den Schreibschutz? Oder geht das etwa gar nicht...?!
Gruß und Danke!
Volker Theisinger
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Jürgen
Geschrieben am: 09.01.2007 10:48:34
Hallo Volker
probiers mal damit
Cells.Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Gruß
Jürgen
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker theisinger
Geschrieben am: 09.01.2007 11:12:10
Hallo Jürgen,
danke für die superschnelle antwort. Kannst Du mir, bevor ich den Code ausprobiere, noch kurz erläutern, was der effekt in detail sein soll?
Gruß
Volker
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Daniel Eisert

Geschrieben am: 09.01.2007 11:24:14
Hallo
damit erreichst du, daß der Benutzer in der Datei nichts ändern kann.
aber vielleicht soll der Nutzer ja bestimmte Sachen ändern können, aber es soll verhindert werden, daß er das abspeichert. (was ja der Schreibschutz ermöglicht)
Leider ist es nicht möglich, die Schreibschutzeigenschaft per VBA zu ändern.
Alternativ könntest du ja eine 2. Datei erstellen, die im Workbook-Open-Ereignis die erste Datei öffnet, je nach Nutzer mit Password oder mit ReadOnly = true.
Dann bleibt der Schreibschutz erhalten, muß aber vom erwählten Nutzerkreis nicht eingegeben werden.
gruß, Daniel
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger

Geschrieben am: 09.01.2007 11:37:54
Hallo,
danke! Also, wie du schon vermutest, ich will nict, dass gespeichert werden kann. Das ändern soll gestattet sein.
Und der clevere trick über die zweite Datei geht auch nicht, da dann DIE Datei trotzdem gespeichert werden könnte - wenn ich das recht verstanden habe. Und genau das will ich ja nicht.
Trotzdem danke an alle! Die Info, dass man über VBA den Schreibschutz nicht an-/ausschalten kann ist ja eigentlich schon der ko für meine anfrage...
Gruß
Volker
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Jürgen
Geschrieben am: 09.01.2007 11:50:23
Hallo Volker,
irgendwie begreife ich Dein Problem nicht richtig. Was macht es für einen Sinn Änderungen zu gestatten, das Speichern aber nicht?
Den Schreibschutz für ein Blatt kann man aber sehr wohl per VBA aufheben/setzen.
Gruß
Jürgen
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Daniel Eisert

Geschrieben am: 09.01.2007 12:22:50
Hallo
den Schreibschutz für ein Blatt kann man schon setzten, meines Wissen nach aber nicht den Schreibschutz für die ganze Datei. Das geht meines Wissen nach nur beim Speichern und dann ist er aber auch erst beim nächsten Öffnen aktiv (wenn du andere Infos hast, würd ich das auch gerne wissen).
Zur Sinnfrage: Es ist schon recht lässtig mit einer Datei zu arbeiten, wenn der Blattschtutz akiviert ist, auch wenn man nur liest.
Weil u.U will man ja neu sortieren, Filtern, auch mal was ausblenden, löschen oder umgruppieren, berechnen oder anders Formatieren. Nur sollte der nächste Leser halt wieder eine "saubere" Datei haben.
Da kann diese Methode schon recht hilfreich sein.
Des weiteren ist es bei einem grossen Nutzerkreis schon sinnvoll, wenn alle "Leser" die Datei nur schreibgschützt öffnen, weil sie sonst für denjenigen, der tatsächlich Daten eingeben muss, u.U. zu lange blockiert ist.
Gruß, Daniel
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Daniel Eisert

Geschrieben am: 09.01.2007 12:05:47
Hallo
doch, geht schon.
in einem Fall öffnest du die Datei mit
Workbooks.Open Filename:= "C:\...\Mappe2.xls", WriteResPassword:="xxx"
im anderen mit
Workbooks.Open Filename:= "C:\...\Mappe2.xls", ReadOnly:=True
in keinem der Fälle wird der Nutzer nach einem Password gefragt und im 2. Fall ist die Datei schreibgeschützt.
Nach dem Öffen der Datei kannst du ja die erste Datei mit
me.close savechanges:=false
wieder schließen.
Wer die Datei nicht über deine Zusatzdatei öffnet, kann die Datei dann ebenfalls nur schreibgeschützt oder mit Password öffnen.
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger
Geschrieben am: 09.01.2007 12:33:35
Das hört sich sehr Interesant an, Daniel. Das werde ich mal testen.
Danke vorerst, wenn ich noch ein Problemhaben sollte, werde ich mich an Dich wenden. Du hast gute Ideen... :-)
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger

Geschrieben am: 09.01.2007 11:54:59
Hi,
oh, das macht schon sinn. Wenn eine Tabelle z.B. dazu dient Musterberechnungen anzustellen. Da will jeder Anwender das ursprünglichee Dokument haben (und zwar garantiert unverfälscht und nicht - auch nur aus Versehen - überspeichert). Er will aber darin Änderungen machen, da er durch Eingabe verschiedener Beispiele bestimmte Szenarieen simuliert (und ggf. auch UNTER ANDEREM NAMEN abspeichert).
Gruß
Volker
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Jürgen

Geschrieben am: 09.01.2007 12:07:04
Hallo Volker
warum machst Du es dann nicht so: anstatt workbook_open probier mal
Workbook_BeforeClose - Display Alerts abschalten - deine Datei schließen und savechanges auf false setzen.
Dann kann jeder lustig munter ändern aber beim Schließen wird nicht nach dem Speichern gefragt und keine Änderungen abgespeichert.
Gruß
Jürgen
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger
Geschrieben am: 09.01.2007 12:36:06
Auch eine interessante Idee. Allerdings könnte dann auch kein Berechtigter mehr speichern...
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Jürgen

Geschrieben am: 09.01.2007 12:47:16
Hallo Volker,
ok, dann überprüfe beim Öffnen ob die Person berechtigt ist und setze eine Variable dann entsprechend auf True oder False. Beim Workbook_BeforeClose Ereignis fragst Du dann ab, ob diese Variable gesetzt ist oder nicht und schließt dann die Datei entsprechend mit oder ohne zu speichern.
Gruß
Jürgen
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger

Geschrieben am: 09.01.2007 13:08:42
Hört sich auch gut an, Jürgen! Ich bin kein VBA-Crack. Könnte der anwender da nicht zwischendrin speichern, ohne dass das Ereignis zieht? Aber es gibt bestimmt auch ein Ereignis, welches sich auf speichern bezieht. Wie lautet dann die Befehlszeile, damit ich mit bzw. ohne zu speichern schließe.
Gruß und Danke für Dein Engagement!
Volker
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Jürgen

Geschrieben am: 09.01.2007 13:43:02
Hallo Volker,
zwischendrin ist das Speichern möglich, da hast Du recht. Das einzige was mir dazu noch einfällt ist den Speichern Button und den Menüpunkt Datei - Speichern zu deaktivieren (Du findest genügend Beispiele wie das geht wenn Du nach Speichern deaktivieren suchst).
Ein User mit Schreibrechten wird dann trotzdem vor dem Schließen gefragt ob er die Änderungen Speichern will oder nicht.
Gruß
Jürgen
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger

Geschrieben am: 09.01.2007 13:47:14
Hallo,
vielen dank für Deine Hilfe. Das wäre sicher auch ein Weg. Allerdings funktioniert die Variante von Daniel mit der vorgeschalteten Datei prima! Wennmmir jetzt noch einer sagt, wie ich die Frage, ob Makros ausgeführt werden sollen umgehe und meine Makros trotzdem ausgeführt werden, dann wäre ich glücklich. Allerdings wäre dann die Sicherheitseinstellungen in Office wertlos, ich bezweifele also, dass sich die Frage bei der bei uns eingestellten Makrosicherheit vermeiden lässt.
Gruß und Dank e an alle, die mir geholfen haben!
Volker
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Jürgen

Geschrieben am: 09.01.2007 13:51:15
Hallo Volker,
ich hatte mal ein ähnliches Problem das ich folgendermaßen gelöst habe: beim Schließen der Datei habe ich alle Arbeitsblätter mit xlveryhidden ausgeblendet (nur eines war noch sichtbar auf dem Dick und Fett zu lesen Stand, dass man die Makros doch gefälligst aktivieren muss).
Wenn man nun die Datei öffnet und die Makros nicht aktiviert bekommt genau diesen schönen Hinweis.
Bei aktiviertem Makro habe ich das Hinweisblatt ausgeblendet und die eigentlichen Daten wieder eingeblendet.
Gruß
Jürgen
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Daniel Eisert

Geschrieben am: 09.01.2007 14:20:31
Hallo
ich denke nicht daß sich diese Sicherheitsabfrage vermeiden lässt.
Dein Schreibschutz ist aber davon ja nicht betroffen.
und wenn der User die Makros bei der Ladedatei abschaltet, wird die original-Datei ja gar nicht erst geladen.
Gruß, Daniel
Bild

Betrifft: AW: Schreibschutz per VBA setzen
von: Volker Theisinger

Geschrieben am: 09.01.2007 15:29:08
Danke für alle Antworten zum Thema Makro. Mir ging es aber darum, dass die Abfrage nicht kommt. Mein Problem ist, dass der Anwender mehrfach "drücken" muss, bevor die eigentliche Datei aufgeht (erst Schreibschutz, dann Makro). Da mir das Ausschalten der Makroabfrage als niht realisierbar erschien, hab ich im Forum nach dem Thema Schreibschutz gefragt. Und als das gelöst war, war ich unverschämt zu erwänen, dass mich jetzt nur noch die Makro Abfrage stört. Aber wenn man die weg machen könnte, wäre das ja auch nicht im Sinne des Erfinders. Deshalb war das mehr eine rethorische Frage...
Gruß und Danke an alle Helfer!!!
 Bild
Excel-Beispiele zum Thema "Schreibschutz per VBA setzen"
Farbpalette auf Graustufen setzen Menüs zurücksetzen
Einige Zeilen in einer sequentiellen Datei ersetzen Alle nichtnumerischen Werte auf Null setzen
AutoFilter über mehrere Arbeitsblätter setzen Bedingte Übergabe des Focus und Setzen der Schreibmarke im Dialog
Vor eine Aufzählung Punkte setzen Bis zur 12. Zeile Cursor nach unten, dann nächste Spalte ansetzen
Focus nach Klick auf einen Frame nicht dorthin setzen Alle #DIV/0!-Fehlerwerte in Tabelle durch 0 ersetzen