小智 7
您可以使用以下更改事件,当组合框值更改时将触发该事件.
Private Sub ComboBox1_Change()
'your code here
End Sub
Run Code Online (Sandbox Code Playgroud)
您也可以使用以下方式获取所选值
ComboBox1.Value
Run Code Online (Sandbox Code Playgroud)
如果您正在处理数据验证列表,则可以使用Worksheet_Change事件.右键单击带有数据验证的工作表,然后选择"查看代码".然后键入:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Value
End Sub
Run Code Online (Sandbox Code Playgroud)
如果你正在处理ActiveX组合框,它会更复杂一些.您需要创建一个自定义类模块来连接事件.首先,创建一个名为CComboEvent的类模块,并将此代码放入其中.
Public WithEvents Cbx As MSForms.ComboBox
Private Sub Cbx_Change()
MsgBox Cbx.Value
End Sub
Run Code Online (Sandbox Code Playgroud)
接下来,创建另一个名为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
Run Code Online (Sandbox Code Playgroud)
最后,创建一个标准模块(而不是类模块).您需要使用代码将所有组合框放入类模块中.您可以将其置于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
Run Code Online (Sandbox Code Playgroud)
现在,无论何时更改组合框,事件都将触发,在此示例中,将显示一个消息框.
您可以在https://www.dropbox.com/s/sfj4kyzolfy03qe/ComboboxEvents.xlsm上查看示例
| 归档时间: |
|
| 查看次数: |
159669 次 |
| 最近记录: |