从动态添加的组合框选择中填充动态添加的列表框

Populating a dynamically added listbox from dynamically added combobox selection

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

Example of menu (3rd column item not added)

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

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

Private Sub ControlHandlerCollection_ComboBoxChange(ComboBox As MSForms.ComboBox)

    MsgBox ComboBox.Name

End Sub

我写这篇文章是为了测试 change sub 是否适用于 ComboBox #87。但是,我不知道如何告诉相同编号的列表框根据 ComboBox#

的选择更改其列表选项

如果我有一个专门用于 ComboBox1_Change() 的侦听器,那么我只需在其中写入 ListBox1 的更改,但我正在为动态 'infinite' 数量的 ComboBox 编写此更改。

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

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

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

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

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