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

时间:2018-07-13 20:37:58

标签: vba excel-vba controls

该用户窗体有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

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

如果我有一个专门用于ComboBox1_Change()的侦听器,则只需在其中编写ListBox1的更改,但我是针对动态“无限”数量的ComboBox编写的。

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

1 个答案:

答案 0 :(得分:0)

好的,父亲帮助我解决了这个问题。它有点静态,但是完全可以满足我的需求。

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

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

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