2017-02-22 3 views
0

Ich versuche, eine Reihe von Kontrollkästchen auf einem Optionsfeld basieren zu verstecken, aber ich erhalte „Fehler 1004: Anwendungs ​​definiert oder Objekt definiert Fehler“:Für jedes Kästchen zum Ankreuzen in Array

Sub FU_EAL_PA_Toggle() 
Dim cb As CheckBox 
Dim MyCheckboxes As Variant 
MyCheckboxes = Array(_ 
    "FU_EAL_PA1", _ 
    "FU_EAL_PA2", _ 
    "FU_EAL_PA3", _ 
    "FU_EAL_PA4", _ 
    "FU_EAL_PA5", _ 
    "FU_EAL_PA6", _ 
    "FU_EAL_PA7", _ 
    "FU_EAL_PA8", _ 
    "FU_EAL_PA8", _ 
    "FU_EAL_PA9", _ 
    "FU_EAL_PA10") 

If ActiveSheet.OptionButtons("FU_PA_NotAttendingEAL").Value = 1 Then 
    For Each cb In ActiveSheet.CheckBoxes(MyCheckboxes) 
     With ActiveSheet.CheckBoxes(MyCheckboxes) 
      .Enabled = True 
      .Visible = True 
     End With 
    Next cb 
Else 
    For Each cb In ActiveSheet.CheckBoxes(MyCheckboxes) 
     With ActiveSheet.CheckBoxes(MyCheckboxes) 
      .Enabled = False 
      .Visible = False 
     End With 
    Next cb 
End If 

End Sub 
  1. Gibt es einen besseren Weg, dies zu tun? (Beachten Sie, dass ich diesen Code für eine andere Teilmenge von Schaltflächen wiederholen werde, sodass ich nicht einfach alle Steuerelemente auf dem Blatt durchlaufen kann).
  2. Was mache ich hier falsch?
+0

Sie können die Steuerelemente http://www.exclforcommerce.com/grouping-checkboxes-in-excel/ gruppieren (oder sie in einem Gruppenfeld-Steuerelement) und dann etwas wie "ActiveSheet.Shapes (" Gruppe 1 ") .Visible = (ActiveSheet.OptionButtons ("FU_PA_NotAttendingEAL"). Wert = 1) ' – Slai

+0

Perfekt! Das hat den Trick gemacht, danke! –

Antwort

0

EDIT: aktualisiert, um die Änderungen

Sub FU_EAL_PA_Toggle() 

    Dim cb As CheckBox 
    Dim bOK as Boolean 
    Dim MyCheckboxes As Variant 
    MyCheckboxes = Array(_ 
     "FU_EAL_PA1", _ 
     "FU_EAL_PA2", _ 
     "FU_EAL_PA3", _ 
     "FU_EAL_PA4", _ 
     "FU_EAL_PA5", _ 
     "FU_EAL_PA6", _ 
     "FU_EAL_PA7", _ 
     "FU_EAL_PA8", _ 
     "FU_EAL_PA8", _ 
     "FU_EAL_PA9", _ 
     "FU_EAL_PA10") 

    bOK = (ActiveSheet.OptionButtons("FU_PA_NotAttendingEAL").Value = 1) 

    For Each cb In MyCheckboxes 
     With ActiveSheet.CheckBoxes(cb) 
       .Enabled = bOK 
       .Visible = bOK 
     End With 
    Next cb 

    'or without the array... 
    For x = 1 To 10 
     With ActiveSheet.CheckBoxes("FU_EAL_PA" & x) 
       .Enabled = bOK 
       .Visible = bOK 
     End With 
    Next x 

End Sub 
+0

Sie haben recht, ich meinte für die zweite Hälfte der IF-Anweisung, die Checkboxen auf False zu setzen. bearbeitet das Original. –

+0

Bearbeitete meine Antwort, um Ihren Code zu vereinfachen –

0

Ich war in der Lage zu spiegeln eine Abhilfe zu finden (BUT: Lesen Sie auf den Boden, weil es einen einfachen Weg ist):

Anstatt ein bauen Array meine Gruppierung zu verwalten, ich meine Namenskonvention realisiert ausreichend war für die Gruppierung zu ermöglichen:

Public Sub FU_EAL_PA_ToggleNew() 

Dim cb As CheckBox 

If ActiveSheet.OptionButtons("FU_PA_NotAttendingEAL").Value = 1 Then 
    For Each cb In ActiveSheet.CheckBoxes 
     If Left(cb.Name, 9) = "FU_EAL_PA" Then 
      cb.Visible = True 
      cb.Enabled = True 
     End If 
    Next cb 
Else 
    For Each cb In ActiveSheet.CheckBoxes 
     If Left(cb.Name, 9) = "FU_EAL_PA" Then 
      cb.Visible = False 
      cb.Enabled = False 
     End If 
    Next cb 
End If 

End Sub 

ABER, war Slaï Antwort über WAY s impler:

Sie können Gruppen die Kontrollen [excelforcommerce.com/grouping-checkboxes-in-excel][1] (oder sie in einer Kontrollgruppe Box setzen) und dann so etwas wie:

ActiveSheet.Shapes("FU_EAL_PA").Visible = _ 
(ActiveSheet.OptionButtons("FU_PA_NotAttendingEAL").Value = 1) 

Was ich tat, und es funktionierte genau so, wie beabsichtigt.

Vielen Dank!

Verwandte Themen