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 

你的代码看起来很像你的问题。 我只能试着指出一些错误。

以下是您需要纠正的问题:

  1. Index声明为public,所以另一个sub可以访问它。 在您的第一个事件子之外,添加行Public Index As String
  2. 您应该使用案例select像case "a"而不是case Is = aIs运算符用于比较对象引用,同时,您正在处理简单的数据types比较。
  3. 在你的case "a"case "b"指令,在yout with语句,使用For Each语句循环你的范围“B”的值。 它看起来像下面的代码示例中的东西。
  4. 在你的问题中,你说:

例如,如果我在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