在您键入

时间:2017-10-19 10:50:19

标签: vba ms-access search access-vba

我的一位同事已经回答了我的问题,但是我想在这里重新发帖以防其他人有问题,并提出问题,最后你会注意到这个问题。如果感兴趣,原帖可以在这里:Original Post

非常感谢社区中的所有人,特别是@Andre的帮助!

这很奇怪,但是当我这么做的时候,它一直试图把我所有的信都倒了。示例:如果我搜索了#34;史密斯",它将作为" htims"进入。我确定它与点击事件有关,但我有一个朋友看看它,我认为她破解了它!它看起来像这样(我已经添加了对新代码行的评论):

首先,文本框点击事件,当您单击该框时,它会清除文本并重置搜索(不需要重置按钮)

Private Sub txtSearch_Click()
    Me.txtSearch.SetFocus 'new line of code
    Me.txtSearch.Text = ""
    Me.Requery
With Me.txtSearch
    .SetFocus
    .SelStart
End With
End Sub

这是实际搜索,将搜索多个字段

Private Sub txtSearch_Change()
    Dim strFilter As String
    Dim sSearch As String
    On Error Resume Next

If Me.txtSearch.Text <> "" Then
    sSearch = "'*" & Replace(Me.txtSearch.Text, "'", "''") & "*'"
    strFilter = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch
    Me.Filter = strFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

If Me.Recordset.RecordCount = 0 Then 'new line of code
    Me.Filter = "" 'new line of code
    Me.FilterOn = False 'new line of code
    Me.txtSearch.SetFocus 'new line of code
    Me.txtSearch.Text = "" 'new line of code
Exit Sub 'new line of code
End If 'new line of code

With Me.txtSearch
    .SetFocus
    .SelStart = Len(Me.txtSearch.Text)
End With
End Sub

这似乎很有效。虽然我认为这个问题已经完成,但我确实有一个问题,如果你能帮我辨别,当我用.Value替换.Text时,为什么这些字母会向后移动?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您需要将Click事件更改为Enter并废弃.SetFocus,因为控件将具有焦点:

Private Sub txtSearch_Enter()
    With Me
        .txtSearch.Value = ""
        .Requery
    End With
End Sub

关于.Text.Value之间的差异:

当控件失去焦点时,.Text属性会在.Value属性更新时进行更新。

Change事件中,你应该检查两件事:a)文本框有一个值(.Text)来应用过滤器,b)recordcount如果没有返回记录则清除过滤器。

Private Sub txtSearch_Change()
    Dim strFilter As String, sSearch As String

    On Error Resume Next
    With me
        If .txtSearch.Text <> "" Then
            sSearch = "'*" & Replace(.txtSearch.Text, "'", "''") & "*'"
            strFilter = "[Last_Name] Like " & sSearch & " OR [First_Name] Like " & sSearch & " OR [SSN] Like " & sSearch
           .Filter = strFilter
           .FilterOn = True
        End If

        If .Recordset.RecordCount = 0 Then
           .Filter = "" 
           .FilterOn = False 
        End If 
    End With
End Sub


向后字母的原因是.SelStart属性,每次键入一个字母时光标在开头跳跃,从而给你的印象是向后翻转单词。