VBA - 获取Combobox的选定值

use*_*142 8 excel vba combobox excel-vba

我在Excel工作表中有数千个单元格,它们是ComboBoxes.用户将随机选择一个并填充它.

如何获取所选的ComboBox值?有没有办法在选择ComboxBoxs时触发函数(即事件处理程序)?

小智 7

您可以使用以下更改事件,当组合框值更改时将触发该事件.

Private Sub ComboBox1_Change()
'your code here
End Sub
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下方式获取所选值

ComboBox1.Value
Run Code Online (Sandbox Code Playgroud)

  • 这肯定会起作用,但是如果 OP 真的在工作表上确实有“数千个”组合框,则需要相应的数千个子程序;每个组合框 1 个。 (2认同)

Dic*_*ika 7

如果您正在处理数据验证列表,则可以使用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上查看示例