在组合框使用过程中经常会使用到组合框模糊筛选功能,这个功能主要是通过在组合框CHANGE事件和NOT IN LIST 事件来实现。
在组合框CHANGE事件中我们通过模糊查询在数据表中查到以在组合框的文本框中输入的数据开头并且在组合框列表中已经存在的项,例子如下:
Private Sub陈列商品_Change()
Dim a As String
a = "*" & Me.陈列商品.Text & "*"
Me.陈列商品.RowSource = "SELECT 商品ID, 货品编号 FROM 商品目录 Where 货品编号 like '" & a & "';"
Me.陈列商品.Dropdown
b = Me.陈列商品.Column(0, 0)
End Sub
上面这段代码红色部分就是模糊查询,跟一般查询的区别在于最后使用了like。
当用户在一个组合框的文本框输入了一个值,而组合框列表中不存在这个值的时候,就发生了notinlist事件,这个事件当且仅当组合框notinlist属性为ture时才能发生。当notinlist属性为ture时,每当用户试图输入一个在组合框列表中不存在的项目时,notinlist事件中的任何代码都将执行。举例如下:
Private Sub陈列商品_NotInList(NewData As String, Response As Integer)
Dim ctl As Control
Set ctl = Me!陈列商品
Response = acDataErrContinue
ctl.Undo
Me.陈列商品 = b
Me.陈列商品.RowSource = "SELECT 商品ID, 货品编号 FROM 商品目录;"
SendKeys ("{Tab}")
End Sub
通过notinlist事件在组合框中添加了组合框列表中没有的项。
Notinlist事件的过程接受一个响应参数,这个参数能告诉VBA在代码执行之后做什么,下面三个常数的任何一个都能放在响应参数表中:
acDataErrAdded----这个常数用于通过代码为组合框的记录源添加新值,这段代码会再查询组合框,并向列表中添加新值。
acDataErrDisplay---这个常数让VBA显示默认错误消息。
acDataErrContinue---这个常数禁用VBA默认错误信息,使用自己的错误消息代替它。Access仍然要求在组合框中输入一个有效的条目。