我有一个名为“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
答案 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在视觉上不清楚的地方提供帮助。
是的!