2016-07-11 15 views
0

Ich habe eine Reihe von Excel-Arbeitsmappen mit Blättern für jeden Monat in ihnen Daten zu verfolgen. Die Namen jedes Monats sind in jeder Arbeitsmappe festgelegt und gesperrt.Sperren Excel-Blätter basierend auf Kontrollkästchen

Ich habe eine MasterKey.xlsm Datei, die ich verwende, um die Blätter automatisch zu sperren/entsperren, so dass die Administratoren von ihnen vollen Zugriff erhalten können. Ich möchte diesem MasterKey-Blatt die Sperrfunktion Monate nach deren Ablauf hinzufügen.

I

O Jan

O Februar

O Mar

...

Damit der Admin der vorherigen Überprüfung kann ein Kontrollkästchen Block für jeden Monat möchten Monat und sperren Sie dann das Blatt.

Ich habe noch nie Kontrollkästchen verwendet, also kann mich jemand in die richtige Richtung für ein Checkbox-gesteuertes Makro steuern, das den Wert jedes Kontrollkästchens liest, und dann kann ich hinter jeder ausgewählten Einheit das Sperrskript hinzufügen wäre großartig.

+0

Sind die Kontrollkästchen in einem Formular? Oder in der Arbeitsmappe? – Sgdva

Antwort

0

Sie beschreiben ein Listenfeld mit diesen Eigenschaftseinstellungen: ListStyle = fmListStyleOption und MultiSelect = fmMultiSelectMulti.

enter image description here

Wählen Sie MasterKey Arbeitsblatt. Führen Sie dann einmal SetupListboxLockWorkSheets einmal aus. Es fügt dem ActiveSheet ein Listenfeld hinzu und konfiguriert es für Sie.

 
    Sub SetupListboxLockWorkSheets() 

     Dim ListBox As MSForms.ListBox 
     Dim ws As Worksheet 

     Set ListBox = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _ 
      DisplayAsIcon:=False, Left:=48.75, Top:=29.25, Width:=150, Height:=200).Object 

     ListBox.Name = "lboLockSheets" 

     ListBox.ListStyle = fmListStyleOption 
     ListBox.MultiSelect = fmMultiSelectMulti 

     For Each ws In ThisWorkbook.Worksheets 

      If Not ws.Name = ActiveSheet.Name Then ListBox.AddItem ws.Name 

     Next 

    End Sub 

Im MasterKey Code-Modul fügen Sie diesen Code

Private Sub lboLockSheets_Change() 
    Const PASSWORD As String = "password" 
    Dim i As Integer 
    Dim ws As Worksheet 
    With lboLockSheets.Object 

     Dim text As String 

     For i = 0 To .ListCount - 1 
      Set ws = Worksheets(.List(i)) 
      If .Selected(i) Then 

       ws.Protect PASSWORD 

      Else 

       ws.Unprotect PASSWORD 
      End If 
     Next i 

    End With 
End Sub 
+0

Wie wäre es, wenn ich wollte, dass sie so viele Boxen überprüfen lassen, wie sie möchten, und dann ein Makro ausführen, das eine Schleife von if tests ist: für Jan bis Dec, wenn cbJan = true, sperre cbJan, loop ... –

Verwandte Themen