Blattschutz und VBA

Hallo Wissende,

ich habe ein Arbeitsblatt mit VBA (Excel 2003).
Mittels VBA werden bestimmte Werte auf dem Arbeitsblatt berechnet und angezeigt. Damit niemand etwas bei den Werten im Arbeitsblatt ändern kann habe ich den Blattschutz aktiviert.
Hielt ich für eine gute Idee.

Nun kam die Kollegin und meinte, dass die Werte nicht automatisch aktualisiert werden --> Blattschutz aufgehoben und alles funktioniert wie gewollt (Werte werden aktualisiert).

Ist es also richtig, dass bei eingeschaltetem Blattschutz auch VBA (sozusagen von intern) keine Möglichkeit hat, die Werte des Arbeitsblattes zu ändern?
Würde ich nach der Reaktion mal annehmen …
Oder habe ich da mal wieder was völlig falsch gemacht und nicht wirklich verstanden?

Viele Grüße!
Thomas

Nun kam die Kollegin und meinte, dass die Werte nicht
automatisch aktualisiert werden --> Blattschutz aufgehoben
und alles funktioniert wie gewollt (Werte werden
aktualisiert).

Ist es also richtig, dass bei eingeschaltetem Blattschutz auch
VBA (sozusagen von intern) keine Möglichkeit hat, die Werte
des Arbeitsblattes zu ändern?

Hi Thomas,

grundsätzlich gesehen, muß eine Vba-Routine, eine Prozedur, ein Makro, wie immer man es nennt durch den PC-Benutzer gestartet/ausgeführt werden.
Zum Starten bietet Excel einige Möglichkeiten an.
Automatisch machen normale Makros also nix, sie machen nur etwas wenn sie manuell gestartet werden.

Ausnahme sind bestimmte festgelegte (oder selbst speziell programmierte) Ereignismakros. Diese starten dann automatisch wenn das jeweilige Ereignis eintritt. Festgelegte Ereignisse sind zum Bleistift Zellwertänderung, Klick auf andere Zelle, Blattberechnung u.v.m.

Soweit zu Makros, jetzt zum Blattschutz. Kein Makro kann in Zellen etwas ändern wenn dort Blattschutz besteht. Aber man kann jedes Makro so schreiben daß es erst den Blattschutz aufhebt, Zellen ändert, Blattschutz wieder setzt.

So, jetzt lese dir das hier alles durch, vielleicht verstehst du dann warum ich deine Anfrage nicht so ganz kapiere um was es da genau geht :smile:

Gruß
Reinhard

Hallo Wissende,

ich habe ein Arbeitsblatt mit VBA (Excel 2003).
Mittels VBA werden bestimmte Werte auf dem Arbeitsblatt
berechnet und angezeigt. Damit niemand etwas bei den Werten im
Arbeitsblatt ändern kann habe ich den Blattschutz aktiviert.
Hielt ich für eine gute Idee.

Nun kam die Kollegin und meinte, dass die Werte nicht
automatisch aktualisiert werden --> Blattschutz aufgehoben
und alles funktioniert wie gewollt (Werte werden
aktualisiert).

Ist es also richtig, dass bei eingeschaltetem Blattschutz auch
VBA (sozusagen von intern) keine Möglichkeit hat, die Werte
des Arbeitsblattes zu ändern?

Wenn die Aktualisierung tatsächlich über VBA angestossen wird, kannst du in VBA den Blattschutz entsprechend einstellen, dass VBA darf, der User aber nicht:

ActiveSheet.Protect UserInterfaceOnly:=True

Hallo peaod,

das ist ja toll (Sternchen!):

ActiveSheet.Protect UserInterfaceOnly:=True

Dazu noch eine Frage: Kann man das auch „von Hand“ einstellen. Sonst muss ich mir ja erst ein Makro dafür schreiben…

mfg

Dirk.Pegasus

Moin, Dirk.Pegasus,

ActiveSheet.Protect UserInterfaceOnly:=True

Dazu noch eine Frage: Kann man das auch „von Hand“ einstellen.

hoffentlich nicht, das könnte dann nämlich auch der Benutzer.

Sonst muss ich mir ja erst ein Makro dafür schreiben…

Du bist doch eh dabei, im Hintergrund zu hexen.

Gruß Ralf

Ich würde es sogar mit Makro machen und dieses mit dem Öffnen-Ereignis verbinden, dann wird diese Einstellung immer bei jedem Öffnen neu gesetzt.
Wenn du im VB-Editor (Alt + F11) im Modul „DieseArbeitsmappe“ (bei englischem Excel „ThisWorkbook“) nachfolgende Zeilen einträgst, wird das Makro automatisch beim Öffnen der Datei ausgeführt.

Private Sub Workbook_Open()
Sheets(„name_des_Arbeitsblatts“).Protect UserInterfaceOnly:=True
End Sub

für ‚name_des_Arbeitsblatts‘ musst du natürlich den tatsächlichen Namen angeben (z.B. Tabelle1)

Alternativ kannst du auch das Sheet-Objekt direkt ansprechen:
Private Sub Workbook_Open()
Tabelle1.Protect UserInterfaceOnly:=True
End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Euch beiden:
Hallo zusammen,

ja, Makro geht auch, aber ich mag diese onOpen nicht wirklich.

Ich dachte das „von Hand“ zu setzen und dann halt einen Blattschutz zu aktivieren. Die Idee dieser Einstellung ist imho eben nicht jedesmal „was zu machen“. Da kann ich ja auch protect und unprotect weiter nehmen.(war ein Scherz …)

Dirk.Pegasus

ja, Makro geht auch, aber ich mag diese onOpen nicht wirklich.

Dann mach es halt nicht mit onOpen, sondern führe das Makro nur einmal aus und lösch es dann wieder.
Die Einstellungen für das Sheet werden meines Wissens mitgespeichert.

Hallo petaod,

muss ich denn wohl. Dachte das ginge auch anders.

also …with activeSheet … ins pesonl.xls …

Danke!

mfg

Dirk.Pegasus

muss ich denn wohl. Dachte das ginge auch anders.
also …with activeSheet … ins pesonl.xls …

Hi Dirk,

was genau behagt dir an Workbooks_Open nicht?

Wenn ich dich richtig interpretiere möchtest du ein Makro in der person?l.xls was bei jeder Datei oder halt bei jeder Datei aus einer Liste die du im Makro hinterlegen und pflegen mußt den Blattschutz einschaltet?

Das geht mit einem Event-Klassenmodul, wobei der Event das Öffnen einer beliebigen Datei ist.

Irgendwo müßte ich da entsprechenden Code rumfliegen haben. Soll ich den suxhen bzw. neu basteln?

Gruß
Reinhard

Wenn die Aktualisierung tatsächlich über VBA angestossen wird,
kannst du in VBA den Blattschutz entsprechend einstellen, dass
VBA darf, der User aber nicht:

ActiveSheet.Protect UserInterfaceOnly:=True

Vielen Dank,
das hatte ich zwar vermutet aber noch nicht gekannt.
Ich hatte gehoffe, sowas in einem Dialogfenster (so schön mit Häkchen :wink: ) zu finden …

Viele Grüße!
Thomas

Hallo Reinhard,

was ich meinte ist, dass ich mir ein Makro „für mich“ ablege mit dem ich meine „Entwicklungen“ halt so umschalte. Mir widerstrebt halt ein Makro einsetzen zu müssen um eine Eigenschaft zu setzen, während ich entwickele. Makros sollen „imer mal wieder auftauchende“ Dinge erledigen. Ich setze ja auch nicht Sheets per Makro auf veryHidden in denen ich einp paar Daten verstecken möchte…

mfg

Dirk.Pegasus

P.S.: „Handwerklich“ ist mir schon klar was ich machen muss :wink:)))

Wenn die Aktualisierung tatsächlich über VBA angestossen wird,
kannst du in VBA den Blattschutz entsprechend einstellen, dass
VBA darf, der User aber nicht:

ActiveSheet.Protect UserInterfaceOnly:=True

Hallo, ich bins doch noch mal.
Ich hatte gedacht, dass ich es jetzt habe, aber dem ist wohl nicht so.

Erst schien alles gut zu funktionieren und jetzt bekomme ich immer bei obiger Anweisung das Dialogfenster „Blattschutz aufheben“, wo ich das Kennwort eingeben soll.
(Übliche User-Ausrede: Ich habe doch aber gar nichts anders gemacht???)

Ich versuche noch mein Glück - irgendwann muß ich das doch auch noch sicher verstehen …

Viele Grüße!
Thomas

Hallo Thomas,

hat denn dein User Makros zugelassen? Ich hab mich auch schon oft gewundert, warum etwas „auf ein mal“ nicht mehr funktionierte :wink:

(Tipp: Zumindest angeschaut hab ich es mal: VBA Code signieren, einmal akzeptieren und Ruhe ist …)

mfg

Dirk.Pegasus

Erst schien alles gut zu funktionieren und jetzt bekomme ich
immer bei obiger Anweisung das Dialogfenster „Blattschutz
aufheben“, wo ich das Kennwort eingeben soll.
(Übliche User-Ausrede: Ich habe doch aber gar nichts anders
gemacht???)

Sheets(„Tabelle1“).Protect Password:=„blabla“, UserInterfaceOnly:=True

bzw. wenn vorher schon ein Password gesetzt ist:
Sheets(„Tabelle1“).UnProtect Password:=„blabla“
Sheets(„Tabelle1“).Protect Password:=„blabla“, UserInterfaceOnly:=True

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Vielen Dank noch einmal für die sehr schnelle Antwort!

Ich hätte schwören können, dass es auch ohne „Password“ schon mal heute früh funktioniert hatte. Aber bei den vielen Versuchen lag es wahrscheinlich nur daran, dass ich den Blattschutz mal vergessen hatte.

Jetzt funktioniert es (hoffentlich dauerhaft und für mich nachvollziehbar) auf jeden Fall wie erwartet.

Vielen Dank und beste Grüße!
Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]