6.4k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen

Ich habe ein Formular im Excel 2003 mit diversen OptionButtons und CheckBoxes. Nun möchte ich, dass wenn ich den Blattschutz aktiviere, alle die von mir vorgewählten Buttons gesperrt werden, sprich, dass diese nicht mehr angewählt werden können.
Durch den Blattschutz kommt zwar eine Meldung, dass das Blatt geschützt ist, die Buttons können aber trotzdem angewählt werden.

Bin um jede Lösung froh.
Danke schon im Voraus

8 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo dlb,

man müsste wissen, aus welcher Symbolleiste, also aus der Symbolleiste "Formular" oder aus der Symbolleiste "Steuerelement/Toolbox", Du die Objekte hast. Wenn diese aus der Symbolleiste "Steuerelemente/Toolbox" stammen, könnte man mit der Eigenschaft ".Enabled" was machen.
Meinst Du mit Formular eigentlich Dein Tabellenblatt oder eine UserForm?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo Oliver

Meine Buttons sind aus der "Steuerelement/Toolbox" und mein Formular ist ein normales Tabellenblatt. Ich dachte mir auch etwas mit der Eigenschaft "enabled" zu machen, so quasi "wenn das Blatt geschützt wird, so sperre alle angewählten optionsbutton und checkboxes". da ich aber vba-anfänger bin, weiss ich nicht, wie ich das realisieren kann.

Danke für deine Antwort
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo dlb,

nachfolgend mal ein Makro, dass alle CheckBoxen und OptionButtons auf .Enabled = False setzt, wenn der Blattschutz aktiv.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Objekte_sperren()
Dim objShape As OLEObject
For Each objShape In ActiveSheet.OLEObjects
If LCase(Left(objShape.Name, 12)) = LCase("optionbutton") And ActiveSheet.ProtectContents Or _
LCase(Left(objShape.Name, 8)) = LCase("checkbox") And ActiveSheet.ProtectContents Then
objShape.Enabled = False
Else
objShape.Enabled = True
End If
Next
End Sub



Da der Blattschutz meines Wissens nach kein Ereignis auslöst, könnte man in dieses Makro noch integrieren, dass der Blattschutz bei Aktivieren des Makros gesetzt wird. Somit müsste, sollte das Blatt geschützt werden, das Makro und nicht die Excel eigene Funktion zum Schützen eines Blattes aufgerufen werden.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo Oliver

Besten Dank für dein Lösungsansatz. Das Makro funktioniert wie du beschrieben hast tiptop. Eine kleine Änderung hätte ich da noch:
Das Makro sperrt bei "Blatt schützen" alle CheckBoxen und OptionButtons. Ist es möglich, dass das Makro nur dijenigen OptionButtons und CheckBoxen sperrt, welche schon angewählt sind?
Es sit so gedacht, dass ich vorher gewisse Optionen im Formular anwählen kann und eine andere Person diese nicht mehr verändern kann sondern nur noch die fehlenden Optionen anwählen kann.

Wenn das möglich ist, dass der Blattschutz mit dem Makro aktiviert werden kann, wäre das ganz gut. Ist der Schutz dann auch mit einem Passwort geschützt? Und wäre das möglich, dass das selbe Makro auch noch die Spalten P und Q ausblendet?

Danke nochmals im Voraus
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

dann sähe das Makro wie folgt aus.

Kopiere die Makros wieder in ein StandardModul und starte sie z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Public Const strPasswort = "Hier das Passwort eintragen"

Sub Objekte_sperren()
Dim objShape As OLEObject
Columns("P:Q").EntireColumn.Hidden = True
ActiveSheet.Protect strPasswort
For Each objShape In ActiveSheet.OLEObjects
If LCase(Left(objShape.Name, 12)) = LCase("optionbutton") And _
ActiveSheet.ProtectContents And objShape.Object.Value = True Or _
LCase(Left(objShape.Name, 8)) = LCase("checkbox") And _
ActiveSheet.ProtectContents And objShape.Object.Value = True Then
objShape.Enabled = False
Else
objShape.Enabled = True
End If
Next
End Sub

Sub Objekte_freigeben()
Dim objShape As OLEObject
ActiveSheet.Unprotect strPasswort
For Each objShape In ActiveSheet.OLEObjects
objShape.Enabled = True
Next
Columns("P:Q").EntireColumn.Hidden = True
End Sub
Das Passwort für den Blattschutz musst Du in dem Code in der Zeile

Public Const strPasswort = "Hier das Passwort eintragen"eintragen. Hier den Text "Hier das Passwort eintragen" gegen Dein Passwort tauschen. Achtung die Anführungszeichen ( "" ) müssen stehen bleiben, dass Passwort muss dazwischen.
Ansonsten werden mit Makro "Objekte_sperren" die Spalten Q und P ausgeblendet, dass Blatt geschützt und nur bei den Objekten, die aktiviert sind, die "Enabled -Eigenschaft" angewandt. Mit Makro "Objekte_freigeben" wird alles wieder aufgehoben.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo Oliver

Die Makros funktionieren soweit. Es ist noch nicht ganz das was ich mir vorgestellt habe (habe mich leider zu ungenau ausgedrückr, sorry).

Mit den CheckBoxen funtioniert alles einwandfrei. Danke
Mit den OptionButtons ist es so, dass immer 2 zu eine Gruppe (groupName) gehören, so ist immer einer Value = true und einer Value = false im Wechsel. Mit deinem Makro kann ich zwar den angewählten OptionButton nicht anwählen, jedoch den Anderen, welcher zur gleichen Gruppe gehört und kann somit den gesperreten auch verändern. Dies dürfte nicht sein. Ist das möglich dies zu sperren? Ich hoffe du verstehst was ich meine :-)
Ist es möglich die beiden Makros in eins zu fassen, dass ich zum Sperren und Freigeben jeweils die gleiche Befehlsschaltfläche anklicken kann?
Beim Makro "Objekte_freigeben" wird das Passwort nicht abgefragt, somit kann man die Buttons wieder verändern. Der Blattschutz bleibt aber aktiv.
Um das Makro "Objekte_freigeben" auszulösen, sollte ich das Blattschutz-Passwort zuerst eingeben müssen und der Blattschutz müsste nach eingabe des Passwortes aufgehoben werden.

Ich haffe ich mache dir nich zu grosse Umstände, aber ich bin unheimlich froh über deine Hilfe!

Danke vielmals
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

nachfolgend das Makro, welches, sit der Blattschutz nicht aktiv, den Blattschutz aktiviert und die Objekte sperrt, bzw. ist der Blattschutz aktiv, nach erfolgreicher Passworteingabe die Objekte wieder entsperrt und den Blattschutz aufhebt.

Kopiere das Makro wieder in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Public Const strPasswort = "Hier das Passwort eintragen"

Sub Objekte_sperren()
Dim objShape As OLEObject

If ActiveSheet.ProtectContents = False Then
Columns("P:Q").EntireColumn.Hidden = True
ActiveSheet.Protect strPasswort
For Each objShape In ActiveSheet.OLEObjects
If LCase(Left(objShape.Name, 12)) = LCase("optionbutton") And _
objShape.Object.Value = True Or _
LCase(Left(objShape.Name, 8)) = LCase("checkbox") And _
objShape.Object.Value = True Then
objShape.Enabled = False
Else
objShape.Enabled = True
End If
Next
Else
On Error GoTo ERRORHANDLER
ActiveSheet.Unprotect
If ActiveSheet.ProtectContents = False Then
For Each objShape In ActiveSheet.OLEObjects
objShape.Enabled = True
Next
Columns("P:Q").EntireColumn.Hidden = False
End If
End If
Exit Sub
ERRORHANDLER:
MsgBox "Das war das falsche Passwort", vbCritical, "falsches Passwort..."
End Sub


Zu Deiner Frage mit der Gruppe von OptionsButton: Lade eventuell mal Deine Datei, z.B. bei www.netupload.de hoch und poste den Link, den Du dann erhältst, damit man sich Deine Datei ansehen kann, sonst sitzen wir nächste Woche noch bei diesem Beitrag, weil immer etwas anderes nicht so ist, wie Du es Dir vorstellst.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hi, ich nochmal.

Ich habe gerade festgestellt, dass bei netupload.de nur noch Bilder hochladen kann. Dann alde Deine Datei eventuell bei http://www.materialordner.de/ hoch.

MfG,
Oliver
[sup]Jeder macht was er will, keiner macht was er soll, aber alle machen mit.[/sup]
...