Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: SHeu112 am Juli 05, 2016, 19:21:00 Nachmittag

Titel: Office 2010: Zellen mit Kontrollfeld sperren und entsperren
Beitrag von: SHeu112 am Juli 05, 2016, 19:21:00 Nachmittag
Hallo,

ich versuche seit längerem den Blatt und Arbeitsmappenschutz sowie das Erstellen eines Makro zu verstehen. Nur leider finde ich auch beim googeln nicht so wirklich die Lösung.

Die Zeilen sollen ganz normal beschreibbar sein, dabei soll es auch egal sein, ob alle Zellen gefüllt sind.
Damit niemand die Daten unvermittelt überschreibt, stelle ich mir vor, hinter die Zellen ein Kontrollfeld zu setzen, womit der Schutz ein- und ausgeschaltet werden kann.

Im Anhang findet Ihr die Beispielansicht / Datei

Die Suche hier im Forum war nicht erfolgreich, sollte die Frage bereits beantwortet sein, so bitte ich um Gnade und den richtigen Suchweg...

Gruß Stefan
Titel: Antw:Office 2010: Zellen mit Kontrollfeld sperren und entsperren
Beitrag von: gmg-cc am Juli 05, 2016, 20:01:28 Nachmittag
Moin, verwende besser ein ActiveX Steuerelemen, das lässt sich besser ansprechen:
Private Sub CheckBox1_Click()
   With ActiveSheet
      .Protect DrawingObjects:=False, Contents:=False, Scenarios:=False
      .Range("A2:H2").Locked = CheckBox1.Value
      .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
   End With
End Sub

Titel: Antw:Office 2010: Zellen mit Kontrollfeld sperren und entsperren
Beitrag von: maninweb am Juli 06, 2016, 10:23:36 Vormittag
Hallo,

falls Du das so meinst, dass Du pro Zeile den Schutz einschalten und auschalten möchtest, dann ein Beispiel in der Datei anbei.
Mit Formularsteuerelementen. Grundsätzlich gilt der Schutz pro Blatt. Zellen kannst Du vom Schutz ausnehmen oder einschließen.

Das Code-Beispiel in der Datei wertet die Position = TopLeftCell des Kontrollkästchens aus, d.h. dass diese sich dann innerhalb
einer Zeile befinden müssen. Und macht sich zunutze, dass per Caller das angeklickte Steuerelement ermittelt werden kann.

Code: Visual Basic
  1.   Sub CellProtectionOnOff()
  2.    
  3.     Dim lngValue As Long
  4.     Dim lngRow   As Long
  5.     Dim strRange As String
  6.    
  7. '   Entschützen...
  8.    
  9.     ActiveSheet.Unprotect "" ' Ggf. Kennwort
  10.    
  11. '   Ermitteln...
  12.    
  13.     lngRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
  14.     lngValue = ActiveSheet.Shapes(Application.Caller).ControlFormat.Value
  15.     strRange = ActiveSheet.Range(ActiveSheet.Cells(lngRow, 1), ActiveSheet.Cells(lngRow, 8)).Address
  16.    
  17. '   Zellschutz ein und aus...
  18.    
  19.     ActiveSheet.Range(strRange).Locked = CBool(lngValue > 0)
  20.    
  21. '   Schützen...
  22.    
  23.     ActiveSheet.Protect ""
  24.    
  25.   End Sub
  26.  

Noch 'ne Anmerkung: bei einer überschaubaren Anzahl von Checkboxes ist's noch Ok. Wenn Du aber später Hunderte
von den Dingern hast, ist die Vorgehensweise nicht optimal. Einfacher wäre dann z.B. eine Spalte zu nehmen und
dessen Doppelklick-Ereignis auszuwerten.

@gmg-cc: Lieber Günther, Active-X ist nicht immer von Vorteil; in einem solchen Fall wie hier oben müsste er für
jedes ActiveX-Steuerelement eine Ereignisroutine machen. Oder Klassen, was dann aber etwas komplizierter ist.

Gruß