如果您正在处理数据验证列表,则可以使用Worksheet_Change事件。右键单击包含数据验证的工作表,然后选择查看代码。然后在此类型:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Value
End Sub
如果你正在处理的ActiveX组合框,这是一个更复杂一点。您需要创建一个自定义类模块来连接事件。首先,创建一个名为CComboEvent的类模块并将其放入其中。
Public WithEvents Cbx As MSForms.ComboBox
Private Sub Cbx_Change()
MsgBox Cbx.Value
End Sub
接下来,创建另一个名为CComboEvents的类模块。这将保存我们所有的CComboEvent实例并将其保留在范围内。把这段代码放在CComboEvents中。
Private mcolComboEvents As Collection
Private Sub Class_Initialize()
Set mcolComboEvents = New Collection
End Sub
Private Sub Class_Terminate()
Set mcolComboEvents = Nothing
End Sub
Public Sub Add(clsComboEvent As CComboEvent)
mcolComboEvents.Add clsComboEvent, clsComboEvent.Cbx.Name
End Sub
最后,创建一个标准模块(未类模块)。您需要使用代码将所有组合框放入类模块中。您可以将它放在Auto_Open过程中,以便在打开工作簿时发生,但这取决于您。
您需要一个Public变量来存放CComboEvents的一个实例。将其公开化,它的所有孩子都会在范围内。你需要它们的范围,以便触发事件。在该过程中,遍历所有组合框,为每个组合框创建一个新的CComboEvent实例,并将其添加到CComboEvents。
Public gclsComboEvents As CComboEvents
Public Sub AddCombox()
Dim oleo As OLEObject
Dim clsComboEvent As CComboEvent
Set gclsComboEvents = New CComboEvents
For Each oleo In Sheet1.OLEObjects
If TypeName(oleo.Object) = "ComboBox" Then
Set clsComboEvent = New CComboEvent
Set clsComboEvent.Cbx = oleo.Object
gclsComboEvents.Add clsComboEvent
End If
Next oleo
End Sub
现在,每当一个组合框改变时,事件将触发,在这个例子中,一个消息框将显示。