我的一位同事已经回答了我的问题,但是我想在这里重新发帖以防其他人有问题,并提出问题,最后你会注意到这个问题。如果感兴趣,原帖可以在这里: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时,为什么这些字母会向后移动?
非常感谢你的帮助!
答案 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
属性,每次键入一个字母时光标在开头跳跃,从而给你的印象是向后翻转单词。