我对 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
对象监听器类
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/