我正在尝试从启用了多选的列表框(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
请注意,我没有使用用户表单,只是将列表框直接放在工作表中。
谢谢!
答案 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