将两个选项按钮与不同行源的单个组合框链接

linking two optionbuttons with single combo box for different rowsource

我有三个 sheet"display"、"whole_list"、"loose_list"。我只是在显示 sheet 中绘制了一个组合框和 2 个选项按钮。

我在 whole_list 和 loose_list 中有 200 个项目列表。当我单击选项按钮 1 组合框时,我希望这样做,它会显示来自 whole_list 的列表。如果我单击选项按钮 2,它会显示 loose_list.

中的列表

有人可以指导我创建上面提到的那个吗?

所以我有空闲时间,想向您展示一种使用 Forms 控件的方法。

这假定 display 选项卡具有表单组合框和两个表单选项按钮。

whole_list 中设置一个名为 whole_list 的命名范围,涵盖您的 200 项列表,例如A1:A200 并为 loose_list 做同样的事情。

standard module 中输入以下内容:

Option Explicit
Dim myList As Variant

Private Sub OptionButton1_Click()

   mylist = ThisWorkbook.Worksheets("whole_list").Range("whole_list").Value

   PopulateComboBox myList

End Sub


Private Sub OptionButton2_Click()

   mylist = ThisWorkbook.Worksheets("loose_list").Range("loose_list").Value

   PopulateComboBox myList

End Sub

Private Sub PopulateComboBox(myList As Variant)

    Dim wb As Workbook
    Dim ws as Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.worksheets("display")

    Dim myDropDown As DropDown

    Set myDropDown = ws.Shapes("Drop Down 1").OLEFormat.Object
    myDropDown.List = myList

End Sub 

确保对象和 sheet 名称匹配。您可以通过突出显示组合框和选项按钮名称,然后检查 sheet 左上角的 Name box 来检查它们。

右键单击每个选项按钮并选择 assign macro 并将每个按钮与正确的 OptionButton 单击子关联。

如果你的对象是ActiveX:

在工作sheet 代码 window 中包含您的 ActiveX 对象,例如display , 如果您右键单击选项卡和 select view code,它将显示代码 window 并输入以下内容(假设您像以前一样有两个命名范围)

Option Explicit
Public myList As Variant

Private Sub OptionButton1_Click()

   mylist = ThisWorkbook.Worksheets("whole_list").Range("whole_list").Value

   Me.ComboBox1.List = myList

End Sub


Private Sub OptionButton2_Click()

   mylist = ThisWorkbook.Worksheets("loose_list").Range("loose_list").Value

   Me.ComboBox1.List = myList

End Sub

不需要额外的程序,也不需要右键单击和分配宏。 Me 部分表示引用代码所在的 sheet。如果你有 Option Explicit,在工作 sheet 代码的顶部,那么你应该收到一个在可用选项中包含组合框名称的提示,但您也可以从 sheet 中的 Name Box 中获取它。在这里,我的组合框称为 Combobox1.