vba - 如何在VBA中动态创建的ComboBox上创建Sub?

标签 vba excel combobox

我对 Excel 编程和 VBA 非常陌生。我陷入了这样一个境地:我有随机数量的动态创建的组合框(ComboBox1、ComboBox2...ComboBoxN)。 我需要实现一个功能,如果我在 ComboBox[i] 中选择一个值(其中 i 可以是 1 到 N 之间的任何随机数),那么它应该触发一个事件来填充 ComboBox[i+1] 中的值。

我该如何为此编写一个子程序?如果不在 Sub 中,还有其他方法可以实现吗?

最佳答案

为了创建组事件,您需要一个自定义类来捕获事件(ObjectListener),公共(public)变量来保持类引用处于事件状态(通常是集合或数组 - ComboListener )和一个用于填充集合的宏( AddListeners_ComboBoxes )。

Workbook_Open() 调用 AddListeners_ComboBoxes 宏。如果代码损坏,您将需要再次调用 AddListeners_ComboBoxes

标准模块

Public ComboListener As Collection

Sub AddListeners_ComboBoxes()
    Dim ws As Worksheet
    Dim obj As OLEObject
    Dim listener As ObjectListener

    Set ComboListener = New Collection

    For Each ws In Worksheets
        For Each obj In ws.OLEObjects
            Select Case TypeName(obj.Object)
            Case "ComboBox"
                Set listener = New ObjectListener
                Set listener.Combo = obj.Object

                ComboListener.Add listener
            End Select
        Next
    Next
End Sub

enter image description here

对象监听器类

Option Explicit

Public WithEvents Combo As MSForms.ComboBox

Private Sub Combo_Change()
    MsgBox Combo.Name
    Select Case Combo.Name
        Case "ComboBox2"
        ActiveSheet.OLEObjects("ComboBox3").Object.ListIndex = 1

    End Select

End Sub

关于vba - 如何在VBA中动态创建的ComboBox上创建Sub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555453/

相关文章:

c - excel中调用.exe库的Malloc错误

vba - 在哪里可以找到默认 VB 按钮的列表?

excel - 将预测值与实际值匹配

c# - 单击组合框时如何避免乘法

java - 如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单

c# - WPF ComboBox 获取突出显示的项目

excel - 有没有办法将 "Properties"窗口也用于 Excel 中的单元格?

excel - 使用 excel 宏返回所有 Access (.mdb) 表的列表

excel - 找出较长期间内较短的天数进行计算

excel - 如何使用 Powershell 强制格式化 Excel 列?