DoCmd.CopyObject引发运行时错误3021

时间:2015-07-09 16:27:07

标签: ms-access

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

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

  

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

执行最后一个语句时出现

错误消息:

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

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

我的猜测是我需要在运行第三个语句之前以某种方式刷新对象列表,但无法弄清楚如何做到这一点。作为一个百灵鸟,我确实尝试过DoCmd.RefreshRecord,因为运行时错误3021说“没有当前记录”,但当然这不起作用。

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

2 个答案:

答案 0 :(得分:0)

你没有提到你的代码所在的位置(它不能形成' Picking')但是我在模块中工作了以下内容。你可以删除任何' 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

答案 1 :(得分:0)

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

当我希望Access提供堆栈可见性时,就像这样。我通过点击F8大约50-75次发现的是我错误地执行代码来为我的所有表重新建立ODBC链接,而同时基本上,相关代码正在操纵拾取表单。

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

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