我有一个大型的MS Access 2013应用程序,在添加一些新的逻辑时,我遇到了一个障碍,谷歌搜索没有让我克服。
当我运行以下代码时,我得到了一个
执行最后一个语句时出现运行时错误3021:没有当前记录。
错误消息:
Docmd.Close acForm,"Picking"
DoCmd.DeleteObject acForm, "Picking"
DoCmd.CopyObject, "Picking", acForm, "Picking On Tablet"
代码中列出的两种形式都存在并且是正确的。第一个表单(Picking)正在第二个语句中正确删除。 (该名称已从导航窗格中显示的表单对象列表中删除。)
我的猜测是我需要在运行第三个语句之前以某种方式刷新对象列表,但无法弄清楚如何做到这一点。作为一个百灵鸟,我确实尝试过DoCmd.RefreshRecord,因为运行时错误3021说“没有当前记录”,但当然这不起作用。
我是否在正确的轨道上?还有其他想法吗?我完全难过了。
答案 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链接,而同时基本上,相关代码正在操纵拾取表单。
选择表单链接到两个表格,这很可能是我的问题。
现在纠正我的逻辑错误后,代码工作正常(是的,它确实在一个单独的模块中运行)。