【问题标题】:Populating a dynamically added listbox from dynamically added combobox selection从动态添加的组合框选择中填充动态添加的列表框
【发布时间】:2018-12-22 06:29:33
【问题描述】:

用户表单有 3 列,一个组合框(供应商列表)、列表框(供应商产品/服务列表)和一个带有所选产品/服务价格的文本框。

Example of menu (3rd column item not added)

用户按下一个按钮来添加一行,该行会在可滚动框架内填充 3 列的新行。我的目标是让列表框的选项根据该行组合框中的选择进行更改。

我有一个监听器(请参阅我之前关于 combobox(number)_change() 的帖子以了解它是如何工作的),如下所示...

Private Sub ControlHandlerCollection_ComboBoxChange(ComboBox As MSForms.ComboBox)

    MsgBox ComboBox.Name

End Sub

我写这个是为了测试更改子是否适用于例如 ComboBox #87。但是,我不知道如何告诉相同编号的列表框根据 ComboBox 的选择来更改其列表选项#

如果我有一个专门针对 ComboBox1_Change() 的侦听器,那么我只需在其中编写 ListBox1 的更改,但我正在为动态“无限”数量的 ComboBox 编写此内容。

我目前的攻击计划是在代码块上方的代码框中的 sub 中编写一个代码块来解析 ComboBox.Name 的结果以获取数字,因为结果将是例如“ComboBox15”我可以写一个分配给 "ListBox" + (ComboBox.Name - "ComboBox") 的变量来调用 ListBox(number) 但是我不确定我实际上是否可以调用基于变量的列表框名称。

【问题讨论】:

    标签: vba excel controls


    【解决方案1】:

    好的,我父亲帮我找到了这个解决方案。它有点静态,但它非常适合我的需要。

    必须将供应商数据编辑到多个工作表中,并使用数据下的定义名称工具来命名范围。列表框根据组合框的选择而变化。

    Dim listBoxName As String
    listBoxName = "myList" & ComboBox.Tag
    
    Dim rangeName As String
    rangeName = "company_1"
    
    Select Case ComboBox.value
        Case "Company 1"
            rangeName = "company_1"
        Case "Company 2"
            rangeName = "company_2"
    End Select
    
    Dim listBox As Control
    Set listBox = Me.Controls(listBoxName)
    listBox.RowSource = rangeName
    

    上面的代码被添加到原始线程中提到的私有子中。

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      相关资源
      最近更新 更多