VBA excel控制一个宏的多个复选框
问题描述:
我有一个非常简单的宏来隐藏点击时复选框所在的行。它的工作原理,但问题是有很多行。VBA excel控制一个宏的多个复选框
Private Sub CheckBox3_Click()
[3:3].EntireRow.Hidden = CheckBox3.Value
Range("AB3").Value = True
End Sub
当然我可以做一个单独的宏,为每一个复选框,我有(其中所有250),但我希望我能够避免macropage是6页长。
我的问题是:有没有办法将它合并为1?唯一不同的是所有的数字(在这个例子中是3)。
答
您应该以编程方式创建这些CheckBox并创建Class Module来处理事件。下面是例子,如何实现它:
ClassModule即MyCheckBox:使用此代码
Option Explicit
Dim WithEvents m_CheckBox As MSForms.CheckBox
Dim m_Row As Long
Public Sub CreateCheckBox(ByVal sh As Worksheet, ByVal rowNumber As Long)
m_Row = rowNumber
Set m_CheckBox = sh.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=sh.Cells(rowNumber, 1).Left, Top:=sh.Cells(rowNumber, 1).Top, Width:=108, Height:=19.5).Object
End Sub
Private Sub m_CheckBox_Change()
MsgBox "I'm in row " & m_Row & " MyValue is " & m_CheckBox.Value
End Sub
模块:
当然Option Explicit
Dim chkBoxes As New Collection
Public Sub test()
Dim sh As Worksheet
Dim chk As MyCheckBox
Set sh = ActiveSheet
Set chk = New MyCheckBox
chk.CreateCheckBox sh, 1
chkBoxes.Add chk
Set chk = New MyCheckBox
chk.CreateCheckBox sh, 2
chkBoxes.Add chk
End Sub
方法CreateCheckBox必须调整到您的需要(我的一个是在第一列创建复选框)。需要在模块中进行全局集合,否则当子结束时事件不会被触发,类会自动销毁。如果工作簿打开和关闭那么这段代码必须升级到之一:
1)重新在工作簿事件即开
2)重新创建的CheckBox每次打开工作簿
不知道是否有类是一个很大的区别,但它们是ActiveX复选框 – perbrethil