用定义的范围填充用户窗体中的组合框

时间:2019-04-15 08:18:55

标签: excel vba combobox userform

在我的用户窗体中是一个ComboBox,此ComboBox显示一个包含100多个值的列表。如果我开始在ComboBox中键入一些字母,我希望下拉列表将自动仅显示具有键入字母的值(到目前为止,效果很好)。但是,如果我选择一个值,则ComboBox将保持为空。

这是我的ComboBox代码:

Private Sub ComboBox1_Change()
    Worksheets("DataSheet").Range("B1").Value = dbCustomer.Value
    dbCustomer.RowSource = "=ddCustomer"   'Named Range
End Sub

在工作表“ DataSheet”的“ D”列中,我写了公式:

=IFERROR(INDEX(Customer;AGGREGAT(15;6;(ROW(Customer)-1)/(--(SEARCH($B$1;Customer)>0));ZEILE()-1);1);"")

我保存的命名范围“ ddCustomer”:

=DataSheet!$D$2:INDEX(DataSheet!$D$2:$D$105;COUNTIF(DataSheet!$D$2:$D$105;"?*"))

我必须更改什么,我选择的值才会显示在ComboBox中?

编辑

可以找到解决方案,也许它不是完美的,但对我来说很好用。

Private Sub dbCustomer_Change()

    Dim customer As Object
    Set customerValue = Worksheets("DataSheet").Range("C2:C479").Find(dbCustomer.Value, LookIn:=xlValues, LookAt:=xlWhole)

    If customerValue Is Nothing Then
        dbCustomer.Clear
        GoTo FillDB
    Else
        Worksheets("DataSheet").Range("B1").Value = ""
        Exit Sub
    End If

FillDB:
    Worksheets("DataSheet").Range("B1").Value = dbCustomer.Value
    For Each customer In Worksheets("DataSheet").Range("D2:D479")
        If customer <> "" Then
            dbCustomer.AddItem customer.Value
        End If
    Next
End Sub

0 个答案:

没有答案