将两个选项按钮与不同行源的单个组合框链接
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
.
我有三个 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
.