使用Access 2010,我有一个表格的条目单元格,它跨越5个单独的表单,我在每个表单上创建了命令按钮以在它们之间导航,过滤当前表单上ID的下一个表单。五个命令按钮中的四个可以很好地过滤到正确的形式,但与一个表单关联的命令按钮反馈错误消息:
保留错误(-3087);此错误没有消息。
我已使用宏和VBA在表单之间导航,使用" OpenForm"在Where Condition或DoCmd.OpenForm上使用过滤器。宏看起来像:
打开表格 表格名称" MyForm" 查看表格 过滤器名称 条件==" [ID] =" &安培; [ID] 数据模式 窗口模式正常 关闭窗口 对象类型表单 对象名称" CurrentForm" 保存否
VBA代码如下:
DoCmd.OpenForm _ " MyForm的" _ ,acNormal,_ ," [ID] =" &安培; [ID] _ ,acFormEdit _ ,acNormal
VBA还反馈运行时错误3000。
谷歌搜索和搜索堆栈溢出没有任何帮助。这个错误似乎无缘无故地出现,因为命令按钮之前工作正常。链接到其他表单的所有其他命令按钮都可以正常工作。
我猜测问题源于目标表单,而不是宏或VBA,但我似乎无法弄清楚它的问题。我'已经:
- 启用信任中心的数据库 使用tempVar过滤表单 - 打开一个空白表格,打开" OnLoad"事件
(所有这些导致相同的错误3087)
有什么想法吗?
答案 0 :(得分:0)
我不喜欢在尝试解决时创建“答案”,但觉得传达更多说明/想法更容易。我会根据问题删除或更新此答案。
请查看我的所有陈述,并确认我已正确说明所做的事情。
背景:使用宏或VBA DoCmd.OpenForm打开另一个表单的表单会导致错误'运行时错误3000和保留错误(-3087)'
您的正常VBA如下:
DoCmd.OpenForm "MyForm", acNormal, , "[ID] = " & [ID], acFormEdit, acNormal
您可以从立即窗口运行上面的代码并删除'Where Condition'(ID = ID),然后表单将打开ok。由于[ID]不在立即窗口的范围内,因此您不能简单地使用“Where”条件运行命令。
Open / Load / Resize / Activate / Current事件中的表格中是否有任何代码?
以下是我将如何进行调试:
在新模块中创建子程序,如下所示:
Option Compare Database
Option Explicit
Sub Test3000()
Dim MyID As Long
On Error GoTo Error_Trap
MyID = InputBox("Enter a valid ID", "Enter Where COndition")
'DoCmd.OpenForm "Form3000", acNormal, , "[ID] = " & [ID], acFormEdit, acNormal
DoCmd.OpenForm "Form3000", acNormal, , "[ID] = " & MyID, acFormEdit, acNormal
Exit Sub
Error_Trap:
Debug.Print Err.Number & vbTab & Err.Description
MsgBox Err.Number & vbTab & Err.Description
Exit Sub
Resume ' If needed later...
Resume Next
End Sub
执行代码,输入有效的ID。
根据发生的情况,我们可以尝试其他选择。