从组合框下拉列表中选择一个选项后,我希望列表框根据该选择显示指定范围的结果。
我的理解是,在使用正确的值和属性之前,简单的If / Then语句就足够了。
我有一张带有两列的工作表(Sheet1)。
A栏名为"字母"和B列命名为"数字。
- 在A列范围内A2 = A,A3 = B,A4 = C,A5 = D.
- 在B列范围内B2 = 1,B3 = 2,B4 = 3,B5 = 4。
我想在combobox1中选择范围A2以在listbox1中显示范围B2。
我想使用并理解最简单的方法。
以下是使用此思维过程的非工作示例。
Private Sub ComboBox1_Change()
If Me.ComboBox1.Value = "A" Then
ListBox1.Value = Range(Sheet1!B2)
End If
End Sub
答案 0 :(得分:0)
我不确定您是否希望组合框的A列填充是动态的?作为快速演示...
在设计模式中,右键单击组合框>属性>其他>然后将ListFillRange设置为A2:A5。这将使组合框中包含该范围的数据。双击组合框以访问代码屏幕。根据您自己的控件名称调整以下逻辑:
Private Sub ComboBox1_Change()
If ComboBox1.Value = "A" Then
ListBox1.AddItem ActiveSheet.Range("b2")
End If
End Sub
答案 1 :(得分:0)
A => 1
B => 2
ComboBox1.ListIndex将为您提供所选的项目索引(基础0)
所以我们可以写成
ListBox1.Value =范围(“B”&(ComboBox1.ListIndex + 2))。值
答案 2 :(得分:0)
我不太确定你想要什么,但鉴于你的userform包含一个名为Combobox1的ComboBox和一个名为Listbox1的ListBox:
Private Sub ComboBox1_Change()
Dim r As Range
Set r = [Sheet1!B2]
ListBox1.Clear
ListBox1.AddItem r.Offset(ComboBox1.ListIndex).Value
End Sub
Private Sub UserForm_Initialize()
Dim r As Range
Set r = [Sheet1!A2:A5]
ComboBox1.List = r.Value
End Sub
如果列B包含范围而不是数字,则可以通过重新添加来添加另一个间接级别:
ListBox1.Clear
ListBox1.AddItem r.Offset(ComboBox1.ListIndex).Value
通过
ListBox1.List = Range(r.Offset(ComboBox1.ListIndex).Value).Value
答案 3 :(得分:0)
我所遵循的过程总结如下。 UserForm Initialise ComboBox和ListBox以及Worksheet引用之间的例程集关系。虽然我已经将接触地址列表的更一般情况进行了一般化,但这对许多人来说可能是有用的。
Private Sub UserForm_Initialize()
Set rData = ActiveSheet.Range("A1").CurrentRegion
Me.ComboBox1.List = rData.Offset(1).Value
Me.ListBox1.ColumnCount = 6
Me.ListBox1.List = Me.ComboBox1.List
End Sub
ComboBox Change Routine有以下代码。
Private Sub ComboBox1_Change()
Me.ListBox1.ListIndex = Me.ComboBox1.ListIndex
End Sub
有一个关闭按钮可以关闭表单。
Private Sub cmdClose_Click() 卸下我 结束子
一般声明如下。
Option Explicit
Dim rData As Range
下面附有Cotact地址目录的图像。
[![Contact address directory][1]][1]
示例文件可以从这里下载https://www.dropbox.com/s/w5rnp8omkl5u0eu/sample_2409c.xlsm?dl=0