下面我有一个这样的表。
我需要得到两个依赖的组合框。
我尝试了以下代码。 表单初始化后,我得到combo1列表 当选择组合1时,我将加载组合2和3
Private Sub UserForm_Initialize()
Dim i As Long
For i = 2 To 9
Me.ComboBox1.AddItem Cells(i, 1)
Next
End Sub
Private Sub ComboBox1_Change()
Me.ComboBox2.Value = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("sheet1").Range("A2:C9"), 2, 0)
Me.ComboBox3.Value = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets("sheet1").Range("A2:C9"), 3, 0)
End Sub
问题是,当我运行时,combo1不仅是toy1和toy2的2个选择,而且还会重复执行toy1 4和toy2 4次。
当我选择组合2和3时,仅显示单个值,而不显示整个列表ID。
请帮助我弄清楚这一点。谢谢
答案 0 :(得分:0)
我正在从事一个具有类似要求的项目,这非常有趣。我无法完成整个项目。这是满足您要求的代码。在这里,当您选择cboToyType
的任何值并转到cboWheel
时,将花费很少的时间来运行代码。您可以优化代码以使其更快。
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
ws.Range("Z:Z").ClearContents
ws.Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Z1"), Unique:=True
ws.Range("Z1").ClearContents
Me.cboToyType.RowSource = ws.Range("Z2").CurrentRegion.Address
Set ws = Nothing
End Sub
Private Sub btnOK_Click()
Unload Me
End Sub
Private Sub cboToyType_AfterUpdate()
Dim ws As Worksheet
Application.ScreenUpdating = False
Set ws = Sheets("Sheet1")
ws.Range("AB:AD").ClearContents
ws.Range("A:C").AutoFilter Field:=1, Criteria1:=Me.cboToyType
ws.Range("B:B").Copy ws.Range("AB1")
ws.Range("AB:AB").RemoveDuplicates Columns:=1, Header:=xlNo
ws.Range("C:C").Copy ws.Range("AD1")
ws.Range("AD:AD").RemoveDuplicates Columns:=1, Header:=xlNo
ws.Range("A:C").AutoFilter
ws.Range("AB1").ClearContents
ws.Range("AD1").ClearContents
Me.cboWheel.RowSource = ws.Range("AB2").CurrentRegion.Address
Me.cboName.RowSource = ws.Range("AD2").CurrentRegion.Address
Set ws = Nothing
Application.ScreenUpdating = True
End Sub