有人能告诉我确定controlX复选框名称的语法是什么? 我有大约4个复选框,这可能会增长,所以我想要一种动态传递复选框名称的方法,而不是写相同的执行4-9次。
我的目的是将复选框名称作为变量传递,因此我不必为每个复选框重复以下代码。此外,有谁知道如何将命名范围引用到特定的复选框?我到目前为止的代码是:
Sub CheckBox1_Click()
Application.ScreenUpdating = False
Dim strCheck As String
strCheck = CheckBox1.Value
If strCheck = True Then
Range("RevAssp_CCV").Select
Selection.EntireRow.Hidden = False
Else
Range("RevAssp_CCV").Select
Selection.EntireRow.Hidden = True
End If
End Sub
提前致谢
答案 0 :(得分:0)
最简单的方法是创建一个自定义包装类,创建所述类的对象数组,然后挂钩到那里的事件。
然后,您可以(例如)检查标题并将NamedRange.EntireRow
的“隐藏”设置为等于该值(例如,检查是不可见的,未检查是否可见)
最基本的实现如下:
CustomCheckBox类模块:
Private WithEvents p_chkBox As MSForms.checkbox
Public Property Let box(value As MSForms.checkbox)
Set p_chkBox = value
End Property
Public Property Get box() As MSForms.checkbox
Set box = p_chkBox
End Property
Private Sub p_chkBox_Click()
Range(p_chkBox.Caption).EntireRow.Hidden = p_chkBox.value
End Sub
在常规模块中:
Public cCheckBox() As CustomCheckBox
Sub Test()
Dim ws As Worksheet
Dim oleObj As OLEObject
Dim i As Integer
i = 0
For Each ws In ThisWorkbook.Worksheets
For Each oleObj In ws.OLEObjects
If TypeName(oleObj.Object) = "CheckBox" Then
ReDim Preserve cCheckBox(0 To i)
Set cCheckBox(i) = New CustomCheckBox
cCheckBox(i).box = oleObj.Object
i = i + 1
End If
Next oleObj
Next ws
End Sub
常规模块将所有复选框放入1个数组中,这是一个公共变量,因此即使代码运行后它也可用。您还可以将此代码作为Private Sub Workbook_Open
放在工作簿模块中,以确保在所有情况下都能正确初始化复选框。
请记住,如果Checkbox标题的命名范围不存在,则会抛出错误。
回到你的例子,你现在可以在你的工作表上添加两个复选框,并将第一个的标题设置为“RevAssp_CCV”,将第二个标题设置为你想要切换的任何其他命名范围。