我是vba的新手,正在尝试构建 第1部分:Sheet1中的一个组合框,用于动态列出Sheet2中一列的唯一值,并将其放在下拉列表中 第2部分:根据组合框的选择,在sheet1中显示sheet2的相关条目。
我已经在方法fillCombo中完成了第1部分,并在ComboBox1_DropButtonClick()下进行了命名,并在方法ComboBox1_Change()下进行了第2部分
当我第一次单击组合框的下拉箭头时,它将列出唯一的条目,并在其中进行选择时,相关的条目将显示在sheet1中,并且一切都很好。
在选择下拉箭头的过程中,依次转到ComboBox1_DropButtonclick()方法,然后转到ComboBox1_change()方法,ComboBox1_change()方法,而没有出现下拉列表,我选择了
因此,它只能在第一个实例中正常工作。
请您纠正错误。
Private Sub ComboBox1_Change()
Dim sht2, sht1, a As Long, X As Long, i As Long
Dim Lastrow As Long
Set sht1 = Worksheets("Sheet1")
Set sht2 = Worksheets("Sheet2")
a = sht2.Cells(Rows.Count, 1).End(xlUp).Row
X = 8
Lastrow = sht1.Range("D" & Rows.Count).End(xlUp).Row
sht1.Range("G8:J" & Lastrow).Clear
For i = 2 To a
If sht2.Cells(i, 3).Value = "Payments" Then
sht2.Cells(i, "C").Resize(1, 4).Copy sht1.Cells(X, "G")
X = X + 1
End If
Next
sht1.Select
sht1.Cells(1, 1).Select
End Sub
Private Sub ComboBox1_DropButtonClick()
Call fillCombo
End Sub
Sub fillCombo()
Dim ws2 As Worksheet
Set ws2 = ThisWorkbook.Sheets("Sheet2")
Group = 3
firstTime = True
strValue = Sheet1.ComboBox1.Value
'last row
wsLR = ws2.Cells(Rows.Count, 1).End(xlUp).Row
'loop thru rows
For l = 2 To wsLR
If ws2.Cells(l, Group) <> "" And (InStr(uE, "|" & ws2.Cells(l, Group) & "|") = 0) Then
If firstTime = True Then
firstTime = False
uE = "|" & uE & ws2.Cells(l, Group) & "|"
Else
uE = uE & ws2.Cells(l, Group) & "|"
End If
End If
Next l
dropValues = Split(uE, "|")
Sheet1.ComboBox1.Clear
For Each cell In dropValues
If cell <> "" Then
Sheet1.ComboBox1.AddItem cell
End If
Next cell
Sheet1.ComboBox1.Value = strValue
End Sub