您应该以编程方式创建这些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