【问题标题】:How do I get the name of the current Listbox in VBA?如何在 VBA 中获取当前列表框的名称?
【发布时间】: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。
  • 那么下面的答案应该有效。

标签: excel vba listbox


【解决方案1】:

您不能将ActiveControl 用于表单列表框。要获取调用 ONCLICK 事件的表单列表框的名称,请使用Application.Caller property (Excel)

在表单列表框的ONCLICK事件中,放这个。

Sub ONCLICK()
    Dim shp As Shape
    Set shp = Shapes(Application.Caller)

    '~~> This will give you the value of what is selected in that listbox
    MsgBox shp.ControlFormat.List(shp.ControlFormat.Value)
End Sub

注意:如果上面的代码不在相应的工作表代码区域中,那么您必须将 Shapes(Application.Caller) 更改为 Activesheet.Shapes(Application.Caller),如下所述。

【讨论】:

  • 太棒了。我认为这部分Shapes(Application.Caller) 应该以ActiveSheet 开头,例如
猜你喜欢
  • 2011-04-17
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 2017-12-27
  • 2011-09-08
相关资源
最近更新 更多