是啥导致 Worksheet_Activate 上的“自动化错误未指定错误”?

Posted

技术标签:

【中文标题】是啥导致 Worksheet_Activate 上的“自动化错误未指定错误”?【英文标题】:What is causing "Automation error Unspecified error" on Worksheet_Activate?是什么导致 Worksheet_Activate 上的“自动化错误未指定错误”? 【发布时间】:2012-08-29 13:15:10 【问题描述】:

我有一个名为“日期”的工作表(对象名称是 A_Dates),需要在它被激活时进行计算(值得注意的是,这在我的个人宏工作簿中)。我经常打开工作簿,其中有太多的计算让我无法进行自动计算。所以我将自动计算设置为手动,工作表中的代码如下:

Private Sub Worksheet_Activate()
   A_Dates.Calculate
End Sub

在过去的 3 个月里,这一直运行良好,日复一日。昨天,它停止工作。它现在在声明行抛出这个错误:

Microsoft Visual Basic
Automation error
Unspecified error
[OK] [Help]

我尝试更改引用工作表的方式,使用:

Sheets("Dates").Calculate

ActiveSheet.Calculate

无济于事。我还包括错误处理:

On Error Resume Next

这并不能阻止它。我什至做到了:

Private Sub Worksheet_Activate()
   On Error GoTo headache
   Sheets("Dates").Calculate
Exit Sub

headache:
   Exit Sub
End Sub

它仍然显示。我完全不知所措。帮忙?

附加信息

我有以下参考资料,并在本工作簿的各种宏中使用所有这些参考资料:

Visual Basic 应用程序

Microsoft Excel 12.0 对象库 OLE 自动化 Microsoft Office 12.0 对象库 Microsoft 脚本运行时 Microsoft Forms 2.0 对象运行时 Microsoft html 对象库 Microsoft Internet 控件 Microsoft ActiveX 数据对象 2.8 库 Microsoft ActiveX 数据对象 Recordset 2.8 库

【问题讨论】:

如果您注释掉该行并手动强制重新计算(使用 [F9]),您会收到错误吗? 不,我没有。而且,一切似乎计算正确。 可能错误与运行任何 VBA 有关,不一定是 Calculate 方法。如果您尝试用Debug.Print A_Dates.Name 替换A_Dates.Calculate 会怎样?这会产生错误吗? 是的,它确实会产生同样的错误。 叹息我不喜欢这里的发展方向...... 下一步是确保您没有遗漏任何参考资料。在 VBA IDE 中,工具 --> 参考... 【参考方案1】:

我们遇到了同样的问题,但有一点不同——我们有几个人都成功地使用了相同的宏,但是一个人遇到了“自动化错误”“未指定错误”的问题。 The other answer helped me 确定问题可能是由“Microsoft ProgressBar Control”引起的。 (非常感谢)

但我没有删除表单,而是在用户的 PC 上取消注册并注册了 MSCOMCTL.OCX,该 PC 出现问题,他又恢复了业务。我希望我知道是什么导致了控件的注册失败 - 这不是我第一次不得不追查此控件的问题。

注销和注册控件:

使用“提升的命令提示符”(命令提示符以管理员身份运行),发出以下命令:

 Regsvr32 /u c:\windows\SysWOW64\MSCOMCTL.OCX

 Regsvr32 c:\windows\SysWOW64\MSCOMCTL.OCX

注意:/u 取消注册 ocx

【讨论】:

您好,我构建的刮刀也面临同样的问题。它适用于 74 到 86 个循环,然后突然 CreateObject("InternetExplorer.Application") 失败。我尝试了您的解决方案,但没有帮助。任何其他线索(仅供参考,我正在使用我的代码访问 Google 专利)【参考方案2】:

每当我遇到这样的奇怪错误时,我要做的第一件事就是使用http://www.appspro.com/Utilities/CodeCleaner.htm 清理代码。这是一个免费的插件,但您也可以手动完成。只需将您的代码从模块中复制到文本文件中(或右键单击并导出)。然后把模块里的代码删掉,编译保存,把代码放回去。

当 Excel “动态”编译时,它会创建 p 代码,然后将其编译为机器代码。有时,特别是在大量编辑的情况下,p 代码会损坏。将代码复制出来、删除并复制回来会强制 Excel 重新生成 p 代码。

我已经用这种方法解决了一些非常奇怪的行为。希望它也适合你。

【讨论】:

【参考方案3】:

我发现了问题。我的一个表单上有一个控件,它显然停止了工作,这产生了连锁反应。

有问题的控件是“Microsoft ProgressBar Control,版本 6.0”。我不知道它为什么停止工作,但删除表单(当然,所有对它的引用)解决了这个问题。

【讨论】:

【参考方案4】:

我刚遇到这个问题,删除加载控件或添加/移动引用没有运气。

通过为 Internet Explorer 添加 DoEvents 来修复,如下所示:

Do
  DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE

还要注意,此值可能会在“完成”和“忙碌”之间反弹,因此此处更健壮的循环可能是有益的。

【讨论】:

【参考方案5】:

我对这个问题的解决方法是在 VBA - 工具 - 参考中添加以下参考。

Microsoft ActiveX 数据对象 2.8 库 Microsoft ActiveX 数据对象记录集 2.8 库

【讨论】:

【参考方案6】:

在 Excel 停止工作之前,我看到此错误以对话框的形式弹出。我正在调试一个新脚本,它打开数百个 excel 文件并从每个文件中提取一些信息。为了解决这个问题,我添加了几个“DoEvents”命令,我的这个错误问题立即消失了。

【讨论】:

【参考方案7】:

只是给其他出现“自动化错误”的人的注释。 我也有一个,发现它是整数溢出的一种特殊情况,它会在循环中中断并给出自动化错误而不是整数溢出错误。 如果您没有找到上述解决方案,请检查您是否使用了正确的尺寸。

【讨论】:

【参考方案8】:

尝试将您的程序编译到较低版本的操作系统。

【讨论】:

【参考方案9】:

我有两个“精确”的 VBA 代码块,一个已执行,另一个有自动化错误。我运行了调试器,它卡在下面的代码块上:

Do While ie.readyState = READYSTATE_COMPLETE
Application.StatusBar = "Going to *** ..."
DoEvents
Loop

因此,我将有效的代码块和无效的代码块粘贴到单独的 Microsoft Word 文档中,然后使用“审阅/比较”功能。 它揭示了错误:

Do While ie.readyState = READYSTATE_COMPLETE(等号 - 不正确)

对比

Do While ie.readyState READYSTATE_COMPLETE(双括号 - 正确)

我强烈建议在视觉上不清楚的地方使用 Word 来提供帮助。

是的!

【讨论】:

以上是关于是啥导致 Worksheet_Activate 上的“自动化错误未指定错误”?的主要内容,如果未能解决你的问题,请参考以下文章

Worksheet_Activate 代码仅在 1 个工作表中无法运行

在桌面上拖动文件时可能导致 COMExceptions 的原因是啥?

是啥导致无法在“ServiceWorkerGlobalScope”上执行“获取”:“仅当缓存”只能设置为“同源”模式错误?

在 Windows 机器上运行 Postgresql 11 时导致“更多无法识别...”错误的原因是啥?

是啥导致连接中止?

是啥导致soap响应在新服务器上没有返回数据?