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)一个列表框(显示搜索结果)来模仿它的功能,然后当用户选择一个项目时,此操作与输入控件断开关联。

您是否尝试过通过按键而不是组合框的更改事件来运行此操作?