Ms access 阻止选择组合框以更改文本
我正在创建一个“键入时搜索”组合框。搜索和更新使用更改事件Ms access 阻止选择组合框以更改文本,ms-access,vba,Ms Access,Vba,我正在创建一个“键入时搜索”组合框。搜索和更新使用更改事件 Private Sub ItemName_Change() Dim strText, strFind, strSQL, strSelect, strWhere, strOrderBy As String strText = Me.ItemName.Text strSelect = "SELECT DISTINCT [ItemName] FROM ItemsMaster " strWhere = "WHERE type = 'Sold
Private Sub ItemName_Change()
Dim strText, strFind, strSQL, strSelect, strWhere, strOrderBy As String
strText = Me.ItemName.Text
strSelect = "SELECT DISTINCT [ItemName] FROM ItemsMaster "
strWhere = "WHERE type = 'Sold Goods' "
strOrderBy = " ORDER BY [ItemName];"
If (Len(Trim(strText)) > 0) Then
'Show the list with only those items containing the types letters
strFind = "ItemsMaster.ItemName Like '"
For i = 1 To Len(Trim(strText))
If (Right(strFind, 1) = "*") Then
strFind = Left(strFind, Len(strFind) - 1)
End If
strFind = strFind & "*" & Mid(strText, i, 1) & "*"
Next
strFind = strFind & "'"
strSQL = strSelect & strWhere & "AND " & strFind & strOrderBy
Me.ItemName.RowSource = strSQL
Else
strSQL = strSelect & strWhere & strOrderBy
Me.ItemName.RowSource = strSQL
End If
Me.ItemName.Dropdown
End Sub
但当我尝试从下拉列表中选择项目时,它会更新文本并触发更改事件。
用户是否可以在不更改文本框中文本的情况下滚动列表?您可以通过在事件处理程序开始时测试listindex是否大于-1并在大于-1时退出来解决此问题,例如:
Private Sub ItemName_Change()
If ItemName.ListIndex > -1 Then
Exit sub
End if
...
End Sub
我认为,尽管有一个很好的机会,你最好不要使用组合框,而是通过(a)一个文本框(输入文本并触发你所写的更改事件)和(b)一个列表框(显示搜索结果)来模仿它的功能,然后当用户选择一个项目时,此操作与输入控件断开关联。您是否尝试过通过按键而不是组合框的更改事件来运行此操作?