【问题标题】:VBA for Access apply filter in separate formVBA for Access 以单独的形式应用过滤器
【发布时间】:2016-06-13 20:43:27
【问题描述】:

我正在使用 Access 2013 中的数据库,我想使用一个表单将过滤器应用于另一个表单。有问题的表单称为高级搜索,我希望它使用输入到文本框中的关键字来将过滤器应用于名为 FormA 的拆分表单。每当我单击搜索按钮时,我都会收到“运行时错误 424:需要对象”。

Private Sub Search_Click() 'Applies a filter based on search Criteria
    Forms!FormA.Filter = _
    "Field1 Like '*" & SearchBox.Value & "*' And Field2 Like '*" & SearchBox.Value & "*'"
    Forms!FormA.FilterOn = True
End Sub

我觉得我对 FormA 的引用搞砸了。有什么想法吗?

【问题讨论】:

  • 尝试开启过滤器,在后面添加这一行:Forms!FormA.FilterOn = True
  • 忘了复制那行,虽然你绝对正确,因为我需要它才能让它最终工作。当它在那里时仍然会出现相同的运行时错误。

标签: ms-access vba ms-access-2013


【解决方案1】:

“需要对象” 错误是由SearchBox.Value 引起的。 Access 在包含您的Search 命令按钮的表单(高级搜索)中找不到名为SearchBox 的控件。

找到正确的名称后,我建议您像这样构建您的Filter 字符串...

Dim strFilter As String
strFilter = "Field1 Like '*" & Me![YourSearchBoxNameHere].Value & _
    "*' And Field2 Like '*" & Me![YourSearchBoxNameHere].Value & "*'"
Debug.Print strFilter '<- inspect this in Immediate window; Ctrl+g will take you there

然后应用Filter ...

Forms!FormA.Filter = strFilter
Forms!FormA.FilterOn = True

还要在所有代码模块的声明部分中包含Option Explicit。然后从 VB 编辑器的主菜单运行 Debug->Compile。修复编译器抱怨的任何问题,然后再次编译。重复直到不再出现编译错误。

【讨论】:

  • 谢谢!我疲惫的眼睛错过了明显的错误。我什至在其他地方发现了一些命名错误。
  • 不客气。在 VB 编辑器中,选择工具 -> 选项。然后在该选项对话框的编辑器选项卡上,勾选需要变量声明旁边的复选标记。该设置将导致 Option Explicit 包含在您创建的任何 new 模块中。但它不会追溯应用于现有模块。
  • 另外,在引用对象时使用感叹号而不是句号的原因是什么?
  • 再次感谢汉斯!
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
相关资源
最近更新 更多