TL; DR-用Subs处理其他MS应用程序中访问数据输入表单中的数据的操作,有时 会为 some 用户抛出3021错误,但要遵循确切的规则同样的步骤也不会导致错误。
此错误使我疯狂。我一直在这里和其他每个论坛中找到问题,或者他们不适用于我的情况,或者他们没有给我足够的信息来找出正在发生的事情,所以我知道下一步该怎么做。 / p>
我有一个拆分数据库,其BE存储在共享点列表中。 FE只是每个用户本地计算机上的应用程序。表单,报告和查询有很多,但是通常的想法是,它用于记录两个不同部门之间的问题,并记录了许多其他格式的信息。使用了3种主要表格:问题录入表格,然后是每个部门使用2个表格来更新其部门的信息。
在主要问题输入表单上,有几个命令按钮,并且关闭按钮已禁用。其中两个按钮是“保存并新建”,“保存并退出”,“删除并退出”。这些工作按预期进行,没有任何问题。其他所有按钮都可以打开Outlook任务或打开Excel文件,并使用表单中的数据填充这些项目。命令按钮的所有子菜单看起来都类似于以下内容:
If Me.Dirty Then Me.Dirty = False
Set OApp = CreateObject("Outlook.Application")
Set OTask = "OApp.CreateItem(3)
'Start taking pieces of the form and assigning it to the task
上面的评论是所有这些潜艇行为不当的地方。但是问题和我发疯的原因是因为它并不会一直发生。每次发生这种情况时(到目前为止,在400个条目中大约有10次出现),我的一个用户来找我,我看着,整个表格被清除了,就像他们没有键入任何东西一样,所以我理解了3021错误,但是记录已保存,因此至少必须达到代码的Me.Dirty部分。我只是不明白为什么当我开始尝试在Access之外执行某些操作时,为什么会清除表单并引发错误。
由于这是断断续续的,我什至不知道下一步是如何尝试寻找这种随机的错误,该错误是根据风的传播方式选择是否发生。
编辑1:因此,我研究并弄清了什么时候发生以及代码中什么地方发生。因此,只有在用户下载最新版本后第一次打开数据输入表单时,才会发生这种情况。如果他们将它们全部关闭然后重新打开,就没有其他问题了。它之所以显得断断续续,是因为某些用户会在星期一下载它。有人会在星期四下载它。有些人会在下周下载它。他们仅在下次使用数据库时下载它。 Me.Dirty = False行上实际发生3021“无当前记录”。 If Me.Dirty行实际上是在清除表单。由于记录已保存,因此我认为它已经超过了这一点,但事实并非如此。奇怪的是,如果我使用断点单步执行代码,则到达该行而不是3021时会收到3167“记录已删除”错误。最奇怪的是,如果用户只需将其全部关闭,然后重新下载即可重新打开。
摘要:
If Me.Dirty Then '<--This clears the form
Me.Dirty = False '<--This results in error 3021 because the form is now empty