用于部分匹配的Excel Combobox过滤器

时间:2015-12-04 03:11:48

标签: excel excel-vba vba

我有一个电子表格来跟踪一些费用。由于行数可以相当长,我决定包含一个UserForm,用户可以在其中输入日期,金额和类别。

可以从Combobox中选择类别,Combobox在初始化UserForm时填充。 我目前面临的问题如下:

类别列表可能会变得相当冗长,并且用户搜索整个类别列表相当不方便。所以我希望用户只需键入类别,并且当他键入时,Combobox-List将只显示部分匹配,然后他可以从中选择所需的类别。

这可以实现吗?

我尝试将.AutoWordSelect属性设置为True,但只显示第一个部分匹配,结果显示默认设置为True

更新

感谢@Doug Glancy,我能够通过以下代码实现我的目标:

Private Sub cboKategorie_Change()

Dim ws5 As Worksheet
Dim Rng As Range, r As Range
Dim search As String

search = "=" & cboKategorie.Value & "*"

Set ws5 = Worksheets(5)

With ws5

    .ListObjects("tblKategorien").Range.AutoFilter Field:=1, Criteria1:=search
    Set Rng = .Range("A2", .Range("A2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible)

End With

cboKategorie.Clear

For Each r In Rng

    cboKategorie.AddItem (r.Value)

Next r

ws5.ListObjects("tblKategorien").Range.AutoFilter Field:=1

End Sub

我现在遇到的问题是,当我从Combobox中选择一些内容时,也会触发Change Event。这当然会强制宏再次运行,并且它会再次过滤我所做的选择,但它实际上从未将它放在文本字段中。有没有办法强制更改事件触发器停止?或者将选择放入文本字​​段?

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,所以如果有人遇到类似的问题,那么代码就是适合我的。

它不漂亮,我对解决方法不太满意,但它确实有效。

MatchEntry

我最后只是检查Combobox中的值是否等于表中保存类别的值之一。 如果值相同,则在发生任何事情之前保留sub。

请注意,要使其生效,必须将fmMatchEntryNone - 属性设置为<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> <script> finalfun(5); function finalfun(id) { $.ajax({ data: { 'id': id }, url: 'delete.php', method: 'POST', // or GET success: function (msg) { alert(msg); } }); } </script>

我希望这将有助于未来面临同样问题的人。