【发布时间】:2017-04-06 17:30:07
【问题描述】:
使用 Access 2010,我有一个表格的条目单元格,它跨越 5 个单独的表单,并且我在每个表单上创建了命令按钮以在它们之间导航,过滤下一个表单以获取当前表单上的 ID。五个命令按钮中有四个可以很好地过滤到正确的表单,但是与一个表单关联的命令按钮会反馈错误消息:
保留错误(-3087);没有针对此错误的消息。
我使用宏和 VBA 在表单之间导航,使用 OpenForm 和 Where 条件上的过滤器或 DoCmd.OpenForm。宏看起来像:
Open Form
Form Name "MyForm"
View Form
Filter name
Where condition =="[ID]=" & [ID]
Data mode
Window mode Normal
Close Window
Object Type Form
Object Name "CurrentForm"
Save No
VBA 代码如下:
DoCmd.OpenForm _
"MyForm" _
, acNormal, _
, "[ID] = " & [ID] _
, acFormEdit _
, acNormal
VBA 也反馈
运行时错误 3000。
Google 搜索和堆栈溢出搜索没有任何帮助。这个错误似乎是无缘无故出现的,因为命令按钮以前可以正常工作。链接到其他表单的所有其他命令按钮都可以正常工作。
我猜测问题源于目标表单,而不是宏或 VBA,但我似乎无法找出问题所在。我已经:
- 在信任中心启用数据库
- 尝试使用
tempVar过滤表单 - 尝试使用
OnLoad事件打开一个空白表单
(所有这些都会导致相同的错误 3087)
【问题讨论】:
-
这个谜题太多,无法做出有根据的猜测,所以我建议你把它分解成简单的东西。请确认您收到“DoCmd.OpenForm”错误?首先,我会手动打开该表单并确保它有效。打开你的 VBA 项目,在即时窗口粘贴以下内容并执行: DoCmd.OpenForm "MyForm", acNormal, , "[ID] = " & [ID], acFormEdit, acNormal 根据成功或失败,我们可以转到第 2 步。
-
冒着将自己暴露为 VBA 菜鸟的风险,我这样做了,并收到“编译错误:未定义外部名称”。我能够从对象面板中拉出表单,并从与数据输入表单不同的导航表单访问它。但是,当我在 GUI 的主功能区中选择“切换过滤器”时,它也会出现 3087 错误。
-
您是否将“MyForm”更改为您的表单名称?老鼠,对不起,我明白了……在这种情况下,您没有“[ID]”。只需删除过滤器,然后重试。
-
我确实更改了即时窗口尝试的表单名称。我在没有过滤器的情况下尝试了立即窗口(OpenForm 应用的除外)。事实上,如果我从 OpenForm 命令中删除“Where”子句,该命令会提取表单的未过滤副本。至于过滤器,我正在尝试将其作为另一种解决方案,并希望将问题缩小到过滤问题。我想我之前的评论不够准确。除了从对象面板中拉出所需的表单并单击“切换过滤器”按钮之外,我什么也没做,它给了我 3087 错误。
-
如果您能够从即时窗口以未过滤的形式打开,但如果您切换过滤器则会出错,我会:(1)在设计视图中打开并检查 Recordsource ...它是表还是查询?看起来好吗? (2) 检查 Filter 属性、FilterOn、Allow Filters 等,看看是否有什么不合适的地方。