2017-02-22 79 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) 

我做了什么,它的工作原理与预期完全相同。

谢谢!