【发布时间】:2019-11-19 23:17:00
【问题描述】:
根据How to address generated ListBoxes and add Items dynamically in VBA?,我动态生成了几个列表框,并为其分配了一个 OnAction Sub。 OnAction 事件将显示 当前 ListBox 的选定项目的数量。
为了更好地理解:
例如我在我的工作表“FS”上生成了 5 个列表框(ListBox1、ListBox2、...)。
当我单击 ListBox1 上的 1 个项目时,MsgBox 显示为“1”。
如果我单击 ListBox1 上的其他项目,MsgBox 显示“2”。
但如果我单击 ListBox3 的另一个项,MsgBox 将显示“1”。
'ListBoxName as a variable for current ListBox and probably the most problematic line
ListBoxName = ActiveControl.Name
selectedItems = 0
Set lb = FS.ListBoxes(ListBoxName)
'The following counts the selected items in target ListBox
For i = 1 To lb.ListCount Step 1
If lb.Selected(i) Then
selectedItems = selectedItems + 1
End If
Next i
'This part puts up the Message Box with the number of selected items in target ListBox
If selectedItems > 0 Then
MsgBox selectedItems
End If
附加信息:我省略了变量的声明以便更好地了解。我不使用ActiveX,我不使用用户窗体。获取列表框的当前名称将帮助我进行进一步的编程和我想做的任务。在我看来,找到我最近点击的 ListBox 的名称看起来很容易......
提前谢谢你!
编辑:
代码放置在子模块 1 中的模块“模块 1”中。在我生成列表框的另一个模块“生成”中,Module1 以lb.OnAction = "Module1.Module1" 开头。
EDIT2 将“OnClick”更改为“OnAction”
【问题讨论】:
-
这段代码放在哪里?
-
@SJR 我编辑了关于您输入的帖子
-
所以这些是工作表上的表单控件,而您的代码是标准模块中的普通子组件?我不清楚你的代码是如何运行的。我不认为
ActiveControl是正确的。表单列表框没有 Click 事件。 -
是的。生成表单控件并在“生成”模块中分配它们的属性。你是绝对正确的,没有“OnClick”事件,但似乎有一个“OnAction”事件。我知道这一点,因为我使用“OnAction”事件对其进行了编程并且它有效。但前提是我指定了 ListBox。
-
那么下面的答案应该有效。