我正在尝试将Excel VBA宏从Windows XP切换到Windows 7.两个Windows版本都是32位操作系统。我的Windows 7版本是企业版。
VBA代码在Windows XP上运行良好。当我尝试在Windows 7上运行代码时,它会崩溃并报告没有错误描述。
我已注册msinet.ocx
,这似乎是Microsoft Internet Transfer Control 6.0所必需的。我还尝试通过添加其他com组件tabctl32
,comctl332/232/32
和comdlg32
来解决安全问题,所有这些组件都是ocx文件。但是,没有任何变化 - 我的代码在Windows 7上仍然失败。
取消注册msinet
后,Excel VBA会打开我的工作簿,报告缺少的参考msinet
,但根本不起作用。我该如何解决这个问题?
答案 0 :(得分:2)
别扭。在宏安全性设置为高或中的Excel会话中打开工作表,并回答关于在工作表中启用VBA宏的对话框中的“否”。
如果它打开,你仍然可以查看项目,如果你试图编译它,这可能会显示一个明显的缺失引用或错误。
下一步:将工作簿保存为html并关闭Excel。清除临时文件夹,重启Excel,打开html文件并将其保存为Excel格式。如果幸运的话,所有遗留对象和引用都将被清除,并替换为与新操作系统兼容的版本。
这大约有一半的时间。
答案 1 :(得分:1)
msinet.ocx未注册时系统没有崩溃,这并不意味着它就是问题。
如果您在或内部的任何过程中调用了该库(msinet.ocx),那么 ThisWorkbook
模块就有了该库unregistered,然后当文件打开并尝试运行On open宏时,模块将无法编译,因此不会运行使其崩溃的代码行。 (我只是猜测这可能是你的情况。)
尝试找出导致系统崩溃的确切调用。
Private Sub Workbook_Open()
)手动运行一步一步(F8)最终,您将获得导致系统崩溃的确切代码行。怀疑这些信息,你将获得更多的帮助。
注:
要在不激活宏的情况下打开文件,您可以使用以下方法之一:
双击文件后按住Shift键并将其打开(从Windows资源管理器中)。要使此方法起作用,必须关闭Excel应用程序。
如果Excel应用程序已打开,请转到VB编辑器并在即时窗口中键入application.EnableEvents=False
(然后按Enter键运行它)。请注意,这将禁用该Excel实例中每个文件的事件。您必须将其设置为true或关闭应用程序(而不仅仅是文件)。
答案 2 :(得分:1)
检查您是否没有对缺失库的引用,如果是这样,只需取消选中它。我遇到了类似的问题,这在我的案例中有所帮助。