vba中的组合框下拉方法一次又一次地调用change方法

时间:2018-07-14 16:02:28

标签: excel-vba

我是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

0 个答案:

没有答案