Worksheet_Activate导致“自动化错误未指定错误”的原因是什么?

时间:2012-09-04 20:30:12

标签: vba error-handling excel-2007

我有一个名为“Dates”的工作表(对象名称为A_Dates),需要在激活时进行计算(可能值得注意的是,这是在我的Personal宏工作簿中)。我经常打开工作簿,有太多的计算在我身上进行自动计算。所以我将自动计算设置为手动,以及工作表中的以下代码:

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 for Applications

  • Microsoft Excel 12.0对象库
  • OLE自动化
  • Microsoft Office 12.0对象库
  • Microsoft Scripting Runtime
  • Microsoft Forms 2.0对象运行时
  • Microsoft HTML对象库
  • Microsoft Internet Controls
  • Microsoft ActiveX数据对象2.8库
  • Microsoft ActiveX数据对象Recordset 2.8库

9 个答案:

答案 0 :(得分:11)

我们遇到了同样的问题,但有一个转折 - 我们有几个人都成功使用相同的宏,但其中一个是“自动化错误”“未指定的错误”问题。您的回答帮助我确定问题可能是由“Microsoft ProgressBar Control”引起的。 (非常感谢)

但是我没有注册表单,而是取消注册并在用户的PC上注册了MSCOMCTL.OCX,这些PC遇到了问题,他又重新开始了业务。我希望我知道是什么导致控制器的注册向南 - 这不是我第一次跟踪这个控件的问题。

取消注册并注册控件:

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

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

 Regsvr32 c:\windows\SysWOW64\MSCOMCTL.OCX

注意:/ u取消注册ocx

答案 1 :(得分:6)

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

当Excel“动态”编译时,它会创建p代码,然后将其编译为机器代码。有时候,特别是在编辑过程中,p代码会被破坏。复制代码,删除代码并复制回来强制Excel重新生成p代码。

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

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

Microsoft ActiveX数据对象2.8库 Microsoft ActiveX数据对象Recordset 2.8库

答案 4 :(得分:1)

我只是遇到了这个问题,在删除加载控件或添加/移动引用方面没有运气。

通过为Internet Explorer添加DoEvents来解决,如下所示:

Do
  DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE

也请注意,此值可以在“完成”和“忙”之间跳动变化,因此在此处更健壮的循环可能会有所帮助。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

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

在While.ie.readyState = READYSTATE_COMPLETE(等号-错误)中做

vs。

在While.ie.readyState <> READYSTATE_COMPLETE时做(双括号-正确)

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

是的!