MS Access在几分钟内写入Excel有时会抛出错误

MS Access在几分钟内写入Excel有时会抛出错误,excel,ms-access,automation,Excel,Ms Access,Automation,我是通过看而不是问来解决问题的人。所以这对我来说是新的。这是一个多年来一直存在的问题,它与不同的计算机、网络、版本和完全不同的代码一起出现。这里有很多,所以,如果你愿意阅读全文,请提前感谢你。 一般来说,我编写的MS Access程序将打开Excel,然后使用Access表和/或Excel表中的数据在工作簿内创建多个工作表。这个过程可能需要几分钟的时间来运行,偶尔会出现错误。我可以告诉您错误消息,但这并不重要,因为它将根据错误发生的位置而有所不同。当它发生时,我只需单击debug并单击conti

我是通过看而不是问来解决问题的人。所以这对我来说是新的。这是一个多年来一直存在的问题,它与不同的计算机、网络、版本和完全不同的代码一起出现。这里有很多,所以,如果你愿意阅读全文,请提前感谢你。 一般来说,我编写的MS Access程序将打开Excel,然后使用Access表和/或Excel表中的数据在工作簿内创建多个工作表。这个过程可能需要几分钟的时间来运行,偶尔会出现错误。我可以告诉您错误消息,但这并不重要,因为它将根据错误发生的位置而有所不同。当它发生时,我只需单击debug并单击continue,它就。。。继续。如果它再次出错(许多循环之后),它将发生在完全相同的位置


所以,我首先要做的是对代码做一些小的修改。在我正在处理的当前程序中,当我写入单元格时会发生错误,并且该值是直接来自表的值。我创建了一个变量,将值复制到变量中,然后写入单元格。错误移动到程序的完全不同部分,并成为“粘贴”错误。通常,解决方法是在错误发生的地方放置一个等待函数。一秒钟通常就足够了。有时需要几个,但这通常能解决问题。这次每个循环只需要一次延迟,所以它可以工作。我只是讨厌在我的节目中造成延误。所以以前有人见过这样的事吗,还是只有我一个人。这感觉像是Access和Excel之间的时间问题,因为延迟通常是有帮助的。提前感谢。

我找到了上一个与Word交互的主要访问项目(约2016年),在那里我遇到了类似的问题。我看到了很多很多Debug.Print语句(有些已注释,有些仍处于活动状态),但与我之前在注释中回忆的内容不同,我再也看不到任何“wait”语句了!根据我现在的记忆,在重新检查代码之后,大多数问题都由

  • 实现健壮的错误处理和最佳实践,以始终关闭自动化对象(和/或在希望实例持久化的情况下释放对象)

  • 订阅并使用适当的自动化对象事件来检测和处理交互,而不是试图将所有内容强制到序列化工作中,然后等待代码。为此,我将所有自动化代码放在结构良好的类中,这些类用事件声明自动化对象
    (当然是在VBA中),然后为我正在执行的操作定义相关的事件处理程序。我现在回想起来,终于能够避免奇怪的错误和应用程序挂起等


  • 对于这样的问题,你可能永远也得不到一个好的答案,所以尽管我不是一个绝对的Office开发专家,但我也有自己的经历,遇到过这样令人沮丧的bug,所以我将分享我的2美分。这可能并不令人满意,但在使用office automation对象经历了类似的行为之后,我的一般理解是操作系统进程之间的交互不是确定性的。特别是由于VBA通常没有线程或并行性问题,因此处理行为不可预测的对象可能会很奇怪。单独分配给每个进程的时间片取决于操作系统,并且随着多个处理器/核心、运行进程、内存管理等的不同,时间片会有很大的差异。尽管自动化对象的目的是控制office应用程序的实例,但API的设计并不适合应用程序间的进程

    虽然如果旧的自动化代码会产生更多有用的错误,可能是嵌套的异常(如.Net和其他现代环境中的异常),这会指示自动化对象之间回调中的延迟和超时,但您会得到各种上下文错误的大杂烩

    我的硬件很旧,但仍在运转。在应用程序之间切换时,我经常会遇到延迟,即使只有一秒钟。我不认为这是一个错误,而是认为这是一台速度较慢的机器,只是等待并继续。将这些类型的随机误差视为类似的延迟可能是有用的。如果这里或那里的等待电话解决了问题,无论多么烦人,这可能是最好的解决方案。。。等待并继续


    在调试这些类型的问题之后,我会时不时地发现潜在的问题,并能够解决它。至少我能够避免数据的实际问题,尽管出现了错误,正如您所描述的。但是,即使当我觉得我理解了这个问题,答案仍然是经常像你所做的那样做,只是加上一个短暂的等待。

    我相信现在这是一个时间问题。在仔细考虑之后,我意识到我可以很容易地(3小时后)将数据库信息与电子表格信息分开,然后将导致问题的更新代码移动到Excel宏中。然后我从Access调用了该宏。不仅错误消失了,而且运行速度快了大约4倍。这并不奇怪,我只是以前没有想过这个方向

    你试过反编译你的mdb吗?它实际上是一个accdb,不,我没有。这是一个有趣的想法。下一次我可能会试试看,但不能保证它们能起作用。而且,它可能在我的电脑上工作,但在我的客户身上可能不行。它们会让事情变慢。在这个最新的程序中,它将花费我大约30秒的处理时间。当有人在等待它完成时,这是一段很长的时间。当然,你的最终目标是解决问题,我相信你会很感激有人立即给出神奇的答案,但实际上你的问题非常不具体:“以前有人见过这样的事情吗?”我回答了这个问题。如果你真的想