【问题标题】:DoCmd.CopyObject throws runtime error 3021DoCmd.CopyObject 引发运行时错误 3021
【发布时间】:2015-07-11 23:00:54
【问题描述】:

我有一个大型的 MS Access 2013 应用程序,在添加一些新逻辑的同时,我遇到了一个谷歌搜索无法让我克服的障碍。

当我运行以下代码时,我得到一个

运行时错误 3021:没有当前记录。

执行最后一条语句时的错误信息:

Docmd.Close acForm,"Picking"
DoCmd.DeleteObject acForm, "Picking"
DoCmd.CopyObject, "Picking", acForm, "Picking On Tablet"

代码中列出的两种形式都存在并且是正确的。第一个表格(拣货)在第二个语句中被正确删除。 (该名称已从导航窗格中显示的表单对象列表中删除。)

我的猜测是,我需要在运行第三条语句之前以某种方式刷新对象列表,但不知道该怎么做。顺便说一句,我确实尝试了 DoCmd.RefreshRecord,因为运行时错误 3021 说“没有当前记录”,但当然这不起作用。

我在正确的轨道上吗?还有其他想法吗?我完全被难住了。

【问题讨论】:

  • 更有可能的是,该消息与您调用该代码的表单中正在发生的事情有关。如果从即时窗口调用它会运行吗?
  • 我同意 Gustav 的观点,我在 Internet 上的任何地方都找不到由 DoCmd.CopyObject 引起的这个错误的单一参考,而且我在谷歌搜索中有一个黑带。

标签: ms-access


【解决方案1】:

您没有提及您的代码所在的位置(不能采用“选择”形式),但我在模块中得到了以下内容。您可以删除任何您想要的“RefreshDatabaseWindow”命令,直到找到罪魁祸首...

Option Compare Database
Option Explicit

Sub Do_Something_With_Forms()

RefreshDatabaseWindow
DoCmd.Close acForm, "Picking"
RefreshDatabaseWindow
DoCmd.DeleteObject acForm, "Picking"
RefreshDatabaseWindow
DoCmd.CopyObject , "Picking", acForm, "Picking On Tablet"
RefreshDatabaseWindow

End Sub

【讨论】:

    【解决方案2】:

    感谢大家的帮助。答案都提供了视角。根据您的反馈,我决定在其他地方检查我的工作。果然,其他地方的代码是问题的根源。

    在这种情况下,我希望 Access 能够提供堆栈可见性。通过按 F8 大约 50-75 次,我发现我错误地执行了代码来为我的所有表重新建立 ODBC 链接,而与此同时,有问题的代码实际上是在操纵选择表单。

    选择表格链接到两个表格,这很可能导致我的问题。

    纠正我的逻辑错误后,现在代码可以正常工作了(是的,它确实在单独的模块中运行)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多