0

我正在尝试存储启用多选的列表框(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

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

谢谢!

4

1 回答 1

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
于 2013-02-06T05:35:02.273 回答