EXCEL VBA combobox 模糊查询触发后 退格键功能改变
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL VBA combobox 模糊查询触发后 退格键功能改变相关的知识,希望对你有一定的参考价值。
借鉴了一个模糊查询的代码,但是具体执行的时候遇到一点点不足,就是触发模糊查询后(也就是存货档案里已有历史品种),就会发生combobox1里面的输入退格键不能删除,而是变成往回选定文字的功能,要按空格键才能删除,这样降低了程序的实用性,请高手指点如何改进。代码如下:
Private Sub ComboBox1_Change()
If M = 1 Then Exit Sub
On Error Resume Next
Dim arr, ARR1(), K As Double, sss As String
arr = Sheets("存货档案").Range("A3:B65536")
sss = Me.ComboBox1.Text
ReDim ARR1(1 To UBound(arr))
For X = 1 To UBound(arr)
If Asc(sss) > 0 Then
If arr(X, 1) Like "*" & sss & "*" Then
K = K + 1
ARR1(K) = arr(X, 2)
End If
Else
If arr(X, 2) Like "*" & sss & "*" Then
K = K + 1
ARR1(K) = arr(X, 2)
End If
End If
Next X
K = 0
Me.ComboBox1.List = ARR1
ComboBox1.DropDown
End Sub
将ComboBox属性MatchEntry改为 2 - fmMatchEntryNone 就O了。很巧,我也复制了别人这样的代码,然后鼓捣明白的
参考技术A 1、仅就这段代码测试(excel2010),退格键是有效,可再查查其他代码。2、“存货档案”表有65536行数据吗,如果没有,建议将“arr = Sheets("存货档案").Range("A3:B65536")”改为:
arr = Sheets("存货档案").Range("A3:B" & Sheets("存货档案").Range("B65536").End(xlUp).Row)
3、只要ComboBox1控件中输入字符,Asc(sss)都会大于0,所以ELS后的这段代码作用没看明白:
Else
If arr(X, 2) Like "*" & sss & "*" Then
K = K + 1
ARR1(K) = arr(X, 2)
End If
Ext comboBox的remote和local的区别
remote模式下不能使用模糊查询的功能
而local模式下可以实现模糊查询的功能
如果非要实现模糊查询的功能,最好就是提前把数据查询出来,缓存到本地,然后再用local模式
且,改个属性,改成可编辑状态,这样就可以用在local模式下用模糊查询
editable : true,
以上是关于EXCEL VBA combobox 模糊查询触发后 退格键功能改变的主要内容,如果未能解决你的问题,请参考以下文章
如何用EXCEL VBA编写模糊查询程序,并将结果显示在工作表中