【发布时间】:2016-02-24 15:34:16
【问题描述】:
我在单一表单视图中有一个绑定表单。
我想模仿记录导航按钮中搜索框的行为,但也有更多的控制权。我面临的问题是,当我的用户搜索记录时,有时他们会在找到记录时不小心开始输入记录(例如在输入 3 或 4 个字母后他们仍在输入搜索词)并且原始数据会丢失.由于这些字段有时需要输入数据,因此此时锁定它们并不是一个真正的选择。
我的想法是关闭导航按钮并通过 VBA 或宏来模仿此功能,并在找到搜索的值时将焦点设置在另一个锁定字段上(还可以选择查找下一个或提醒某物是或未找到)。
我已经尝试过使用宏和 VBA,但无法使用。
我有这段代码(并且已经使用了一些参数),但它只会搜索当前记录(而不是所有记录)并且移动到下一条记录,或者如果我注释掉则根本没有记录FindNext 行。
Private Sub cmdFind_Click()
Dim sText As String
sText = Me.txtSearch 'a text box where user enters search term
DoCmd.FindRecord sText, acAnywhere, False, acDown, True, acCurrent
DoCmd.FindNext
End Sub
显然,我错过了一些东西。有人可以提供一些见解或替代方法。
【问题讨论】:
-
您在什么情况下运行此代码?如果它在
txtSearch_Change()中,您将需要Me.txtSearch.Text而不是Me.txtSearch(即Me.txtSearch.Value),因为在您离开控件之前不会设置.Value。 -- 尽管在使用空搜索文本调用 DoCmd.FindRecord 时出现运行时错误。 -- 编辑:要找出这是否是问题所在,请在分配后添加Debug.Print sText。 -
如果可以只显示包含搜索文本匹配的行,请使用表单的
Filter属性。 -
@Andre - 谢谢。我更新了我的答案。我通过单击按钮调用它。
sText不为空。 -
@HansUp。谢谢,但表格不在数据表视图中。它是具有自定义布局的 SingleForm。
-
如果你在
DoCmd.FindRecord之前执行Me!txtSome_field.SetFocus,那么如果有匹配项,那应该将你放在txtSome_field匹配txtSearch的第一条记录中。如果有多个匹配项,DoCmd.FindNext将带您到第二个匹配记录。那是你要的吗? (对不起,我迷路了。)
标签: ms-access vba ms-access-2010