用于多个表单控件的单个回调宏(ListBoxes是特定的)

时间:2013-02-06 04:41:05

标签: excel excel-vba excel-2010 vba

我正在尝试从启用了多选的列表框(Excel 2010)中存储选定的值。通过迭代列表中的项目以查看它们是否被选中,可以轻松完成此操作。但是,在添加了许多列表框后,我必须为每个列表框创建一个回调:

Sub ListBox1_Changed()
Call DoStuff(Worksheets("Sheet1").ListBoxes(1))
End Sub

Sub ListBox2_Changed()
Call DoStuff(Worksheets("Sheet1").ListBoxes(2))
End Sub

Sub DoStuff(L as ListBox)
'Do stuff here
Sub

最终,我将在多个工作表中找到大量这些ListBox。

现在我的问题是:是否可以引用调用宏的特定框并为我的所有列表框分配此单个函数?我猜的是:

Sub ListBox_Changed(ByVal L as Object)
' This will not work btw ^^^^^^^^

' Magic code goes here.
Call DoStuff(L_converted_to_ListBox_Format)
End Sub

请注意,我没有使用用户表单,只是将列表框直接放在工作表中。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Application.Caller来确定哪个ListBox称为Sub,就像这样

Sub ListBox_Changed()
    Dim v As Variant
    Dim lb As ListBox
    v = Application.Caller
    On Error Resume Next
    Set lb = Me.ListBoxes(v)
    If Err.Number <> 0 Then Exit Sub
    On Error GoTo 0
    DoStuff lb
End Sub

Sub DoStuff(lb As ListBox)
    Debug.Print lb.List(lb.Value)
End Sub