Excel VBA基于另一个combobox将列的值添加到combobox中
我想添加列A中的项目到combobox1,然后添加项目列B到combobox2基于combobox1值。
AB 1 a ddd 2 a fgh 3 a jcv 4 b ggh 5 b ggg 6 b fff 7 b hhh
例如
如果我在combobox1中select“b”,那么这些string应该被添加到combobox2:ggh,ggg,fff和hhh
我的代码不起作用。 先谢谢你。
Private Sub ComboBox1_Change() With Sheet3.ComboBox1 For Each Cell In Range("A1:A7") .AddItem Cell.Value Next End With Dim index As Integer index = ComboBox1.value Call combo2 End Sub Private Sub combo2() For Each Cell In Range("A1:A7") Select Case index Case Is = a With ComboBox2 .AddItem "offset(cell.address,1,1,1,0)" End With Case Is = b With ComboBox2 .AddItem "offset(cell.address,1,1,1,0)" End With End Select Next End Sub
你的代码看起来很像你的问题。 我只能试着指出一些错误。
以下是您需要纠正的问题:
- 将
Index
声明为public,所以另一个sub可以访问它。 在您的第一个事件子之外,添加行Public Index As String
。 - 您应该使用案例select像
case "a"
而不是case Is = a
。Is
运算符用于比较对象引用,同时,您正在处理简单的数据types比较。 - 在你的
case "a"
和case "b"
指令,在youtwith
语句,使用For Each
语句循环你的范围“B”的值。 它看起来像下面的代码示例中的东西。 - 在你的问题中,你说:
例如,如果我在combobox1中select“b”,则应将这些string添加到combobox2:ggh,ggg,fff和hhh
然而,你用第一列的值来填充你的第一个组合,而我只能假设你打算说B,否则,你的select case语句将不起作用。
代码示例:
For Each Cell in Range("B1:B7") If Cell.Value = "a" Then .AddItem Cell.Offset(0,1).Value End If Next