Excel 条件组合框多个列
我有一个问题,我想让Combobox2的结果依赖于Combobox1的结果 例如:Excel 条件组合框多个列,excel,vba,Excel,Vba,我有一个问题,我想让Combobox2的结果依赖于Combobox1的结果 例如: a 1 x a 2 y b 2 z b 3 x c 3 z d 4 z 代码如下: Private Sub Combobox1_Change() Dim wslk As Worksheet Set wslk = Worksheets("Sheet1") Dim i As Integer Comb
a 1 x
a 2 y
b 2 z
b 3 x
c 3 z
d 4 z
代码如下:
Private Sub Combobox1_Change()
Dim wslk As Worksheet
Set wslk = Worksheets("Sheet1")
Dim i As Integer
Combobox2.Clear
For i = 2 To wslk.Range("B" & Application.Rows.Count).End(xlUp).row
If wslk.Range("B" & i).Value = Combobox1.Value Then
Combobox2.AddItem wslk.Range("A" & i).Value
'The problem starts here
Combobox2.Column(1, i - 2) = wslk.Range("C" & i).Value
Combobox2.ColumnCount = 2
End If
Next i
End Sub
到目前为止,它已经能够使用Combobox1的结果填充Combobox2
例如,如果在Combobox1中选择“a”,Combox2将显示“1”和“2”
但是,当我在Combobox1中选择除“a”之外的任何内容时,它会崩溃,并说:
Combobox2.Column(1, i - 2) <Could not get the Column property. Invalid property...
Combobox2.列(1,i-2)请尝试下一个代码:
Private Sub Combobox1_Change()
Dim wslk As Worksheet, cb2 As MSForms.ComboBox
Set wslk = Worksheets("Sheet1")
Set cb2 = Me.ComboBox2
Dim i As Long
cb2.Clear
For i = 2 To wslk.Range("B" & Application.Rows.count).End(xlUp).Row
If wslk.Range("B" & i).Value = ComboBox1.Value Then
With cb2
.ColumnCount = 2
.AddItem wslk.Range("A" & i).Value
'The problem starts here (not anymore...)
cb2.Column(1, cb2.ListCount - 1) = wslk.Range("C" & i).Value
End With
End If
Next i
End Sub
您的代码应该在最后一个现有项(cb2.ListCount-1
)之后添加该项。是否要为a添加Combobox2
列的两个值x和y
?但是,您在问题开头展示的示例并不是从a列开始的?如果是,在B:B列中查找“a”将找不到匹配项。。。它是从B:B列开始的吗?列(1,i-2)
是错误的。它恰好与工作表中的第一行匹配。。。我将发布一个澄清问题的答案…@Harun24HR是的!这就是目的!哇,这个很有魅力!非常感谢你的帮助。你介意教我为什么我应该将代码改为:cb2.ListCount-1
而不是以前的I-2
,因为它对“a”有效,但对其余部分无效。@Zainedevontay:我试着在最后一句话中建议。。。因此,新项目将添加到上一个现有项目之后。在第一种情况下,由于第一个元素为零,第二个元素为1(i值),它以您的方式工作(碰巧)。但是尝试同样的方法,让我们说“b”或“c”组合值,它将不起作用。由于清除了组合,因此必须将其第一个元素添加到零列表索引中。根据迭代,它将是4-2=2。并且组合不能接受大于其ListCount-1
的列表索引。减`因为第一个索引是零。@Zainedevontay:如果你喜欢这个答案,投票并不会杀死任何能够做到这一点的人……:)我懂了。我想我还有很多东西要学!谢谢你的解释。哦,是的,我本来打算投赞成票,但没有足够的声誉。然而,我只需要再做一次就足够了。再次感谢!