VBA excel用1个macros控制多个checkbox

我有一个非常简单的macros来隐藏点击时checkbox所在的行。 它的工作,但问题是有很多行。

Private Sub CheckBox3_Click() [3:3].EntireRow.Hidden = CheckBox3.Value Range("AB3").Value = True End Sub 

我当然可以为每个checkbox制作一个单独的macros(全部250个),但是我希望我可以避免6页长的macropage。

我的问题是:有没有办法将它合并为1? 唯一不同的是所有的数字(在这个例子中是3)。

您应该编程创build这些CheckBox并创build类模块来处理事件。 下面是如何实现它的例子:

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必须根据您的需要进行调整(我的一个是在第一列创buildcheckbox)。 在模块中的全局集合是必需的,否则当子结束时事件不会被触发,类会被自动销毁。 如果工作簿已打开并closures,则必须将此代码升级到以下任一项:

1)重新创build工作簿事件上的类,即打开

2)每次打开工作簿时重新创buildcheckbox