运行时错误3000和保留错误(-3087)访问2010宏/ VBA

时间:2016-11-22 21:33:42

标签: vba ms-access macros

使用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)

有什么想法吗?

1 个答案:

答案 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事件中的表格中是否有任何代码?

以下是我将如何进行调试:

  1. 克隆该表单,将其另存为“Form3000”。
  2. 转到代码窗口,选择所有代码并注释掉。
  3. 获取有效的“ID”进行测试。
  4. 在新模块中创建子程序,如下所示:

    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
    
  5. 执行代码,输入有效的ID。

  6. 会发生什么?
  7. 如果仍然失败,请发布Recordsource的表单属性,过滤器
  8. 如果有效,请取消注释表单中的所有代码并将其发布在您的问题中。
  9. 根据发生的情况,我们可以尝试其他选择。