2017-02-22 41 views
0

我試圖隱藏了一堆基於選項按鈕,複選框的每個複選框,但我不斷收到「錯誤1004:應用程序定義或對象定義的錯誤」:對於陣列

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. 有沒有更好的方法來做到這一點? (請注意,我將爲另一個按鈕子集重複此代碼,所以我不能循環瀏覽表單上的所有控件)。
  2. 我在這裏做錯了什麼?
+0

您可以將控件歸爲http://www.excelforcommerce.com/grouping-checkboxes-in-excel/(或將它們放在組框控件中),然後像'ActiveSheet.Shapes(「Group 1」) .Visible =(ActiveSheet.OptionButtons(「FU_PA_NotAttendingEAL」)。Value = 1)' – Slai

+0

完美!那就是訣竅,謝謝! –

回答

0

編輯:更新,以反映更改

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

你說得對,我打算在IF語句的後半部分將複選框切換到False。編輯原件。 –

+0

編輯我的答案,以簡化您的代碼 –

0

我能找到一個解決方法(BUT:閱讀到了谷底,因爲有一個更簡單的方法):

而不是建立一個陣列來管理我的分組,我意識到我的命名約定足以允許分組:

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 

但是,Slai的迴應是WAY s impler:

你能集團的控制[excelforcommerce.com/grouping-checkboxes-in-excel][1(或者把它們放在一個組框控件),然後是這樣的:

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

我做了什麼,它的工作原理與預期完全相同。

謝謝!