我有一个包含三列的excel文件。 每行都是独一无二的。 有三个组合框对应于这三列。
当选择第一个组合框中的选项时,我希望第二个组合框中填充第二列中与第一个组合框中的选择对应的项目。 即:
- Adam | Apple | Seed
- Adam | Apple | Core
- Adam | Orange | Peel
- Jess | Banana | Peel
- Jess | Mango | Pulp
- Jess | Orange | Seed
这里第一列有数据Adam,Jess。第一个组合框已经有两个独特的选项Adam和Jess。
一旦用户选择了Adam或Jess,第二个组合框应填充相应的水果名称。
实施例。 Combobox1 = Adam
然后combobox2 = {Apple,Orange}
当选择Apple / Orange时,第三个组合框应该有与前两个组合框相对应的选项。
请注意我的第一个组合框已正确填充数据:
Function UniqueList()
'Populate control with
'unique list.
Range("Names").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("uniqueNames"), Unique:=True
'Set combo control's Row Source property.
Range("uniqueNames").RemoveDuplicates Columns:=1, Header:=xlNo
UserForm1.uniqueNameList.RowSource = Selection.CurrentRegion.Address
'Display user form.
UserForm1.Show
Selection.CurrentRegion.Clear
End Function
编辑:我基本上需要这样说:
使用第二行的单元格填充第二个组合框,其中第一行等于combobox1。
答案 0 :(得分:1)
假设您在sheet1中有数据:
1-您可以使用combobox_Change事件处理程序来跟踪用户何时从组合框中选择了新值。
2- Combobox.listindex:这将为您提供组合框中当前选择的索引
3- Combobox.list:是一个包含组合框中所有项目的数组
Private Sub ComboBox1_Change()
Dim strValue As String
Dim i As Integer
If ComboBox1.ListIndex <> -1 Then
strValue = ComboBox1.List(ComboBox1.ListIndex)
ComboBox2.Clear
ComboBox3.Clear
For i = 1 To 6
If Cells(i, 1) = strValue Then
If exists(ComboBox2, Cells(i, 2)) = False Then
ComboBox2.AddItem (Cells(i, 2))
End If
If exists(ComboBox3, Cells(i, 3)) = False Then
ComboBox3.AddItem (Cells(i, 3))
End If
End If
Next i
Else
ComboBox2.Clear
ComboBox3.Clear
End If
End Sub
Private Sub ComboBox2_Change()
Dim strValue1 As String
Dim strValue2 As String
Dim i As Integer
If (ComboBox2.ListIndex <> -1) And (ComboBox1.ListIndex <> -1) Then
strValue1 = ComboBox2.List(ComboBox2.ListIndex)
strValue2 = ComboBox1.List(ComboBox1.ListIndex)
ComboBox3.Clear
For i = 1 To 6
If (Cells(i, 2) = strValue1) And (Cells(i, 1) = strValue2) Then
If exists(ComboBox3, Cells(i, 3)) = False Then
ComboBox3.AddItem (Cells(i, 3))
End If
End If
Next i
Else
ComboBox3.Clear
End If
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 6
If exists(ComboBox1, Cells(i, 1)) = False Then
ComboBox1.AddItem (Cells(i, 1))
End If
Next i
End Sub
Private Function exists(ByRef objCmb As ComboBox, ByVal strValue As String) As Boolean
Dim i As Integer
For i = 1 To objCmb.ListCount
If strValue = objCmb.List(i - 1) Then
exists = True
Exit Function
End If
Next i
exists = False
End Function
假设您有3个名为Combobox1,Combobox2和Combobox3(VBA编辑器创建的默认名称)的组合框,代码将起作用