Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 条件组合框多个列_Excel_Vba - Fatal编程技术网

Excel 条件组合框多个列

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

我有一个问题,我想让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
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:如果你喜欢这个答案,投票并不会杀死任何能够做到这一点的人……:)我懂了。我想我还有很多东西要学!谢谢你的解释。哦,是的,我本来打算投赞成票,但没有足够的声誉。然而,我只需要再做一次就足够了。再次感谢!