2012-07-18 177 views
0

我试图将Excel VBA宏从Windows XP切换到Windows 7.这两个Windows版本都是32位操作系统。我的Windows 7版本是企业版。Windows XP Excel VBA在Windows 7上崩溃

VBA代码在Windows XP上正常工作。当我尝试在Windows 7上运行代码时,它崩溃并报告没有错误描述。

我注册了msinet.ocx,这似乎是Microsoft Internet Transfer Control 6.0所必需的。我还试图通过添加额外的com组件tabctl32,comctl332/232/32comdlg32来解决安全问题,所有这些都是ocx文件。但是,没有任何更改 - 我的代码在Windows 7上仍然失败。

一旦msinet未注册,Excel VBA打开我的工作簿,报告缺少的参考msinet,根本不工作。我该如何解决这个问题?

+1

您是否试图在Windows 7机器上编译您的代码? – assylias 2012-07-18 11:02:54

+0

是的,我试过了。但缺少参考资料,无法解决问题。我想知道Win7/xp VBA代码中是否存在一些兼容性问题。 – Gionata 2012-07-18 11:12:15

+0

打开工作簿或执行某些过程时是否崩溃?你有没有检查任何API调用语法/参数的变化? – CaBieberach 2012-07-18 13:03:04

回答

2

尴尬。在宏安全设置为高或中的Excel会话中打开工作表,并在对话框中回复“否”以启用工作表中的VBA宏。

如果它打开,您仍然应该能够查看该项目,并且如果您尝试编译该项目,这可能会显示明显缺失的引用或错误。

下一步:将工作簿保存为html并关闭Excel。清除临时文件夹,重新启动excel,打开html文件并将其保存回Excel格式。如果幸运的话,所有遗留的对象和引用都将被清除掉,并替换为与新操作系统兼容的版本。

这项工作大约有一半的时间。

+0

我试过你的解决方案。没有正面的反馈。有两个事实让我困惑。 如果未安装msinet.ocx,引用列表显然将引用标记为缺失,但Excel不会崩溃,以及应用程序不起作用。一旦安装了msinet.ocx并启用了activeX,Excel就会崩溃。没有缺失的参考。我认为msinet与Win7完全不兼容......是不是? – Gionata 2012-07-19 10:34:15

+0

为延误道歉,我已经离开了一个月的国家... – 2012-08-23 00:48:47

+0

你实际上已经发现了一些东西在这里:用于清理损坏的Excel文件的标准技术不会改变观察到的行为。所以你已经消除了这个问题的一个可能的来源:它不是你的文件,它是msinet.ocx - 我建议你的下一个调查是去除所有的实例和对该ocx的引用,并查看文件是否稳定。 – 2012-08-23 00:54:31

1

当msinet.ocx未注册时,系统不崩溃并不必要意味着它是问题所在。

如果您有任何程序该库(msinet.ocx)呼叫ThisWorkbook模块调用内部和未注册的,那么当文件打开,并尝试运行在你有图书馆打开宏模块不会编译,因此不会运行使其崩溃的代码行。 (我只是猜测这可能是你的情况。)

试着找出哪一个确切的调用会让你的系统崩溃。

  1. 让msinet.ocx注册。
  2. 在不激活宏的情况下打开文件。
  3. 然后手动运行通过你打开文件的代码分步(F8)(Private Sub Workbook_Open()

最终你会达到的准确代码行,使您的系统崩溃。请提供这些信息,您将能够获得更多帮助。

注:

要打开该文件,而无需激活宏,你可以使用下面的方法之一:

  • 按下并按住Shift键,你doubleclicked上的文件后,将其打开(从Windows资源管理器)。要使此方法起作用,必须关闭Excel应用程序。

  • 如果Excel应用程序打开,然后进入VB编辑器和即时窗口中键入application.EnableEvents=False(并回车来运行它)。请注意,这将禁用Excel实例中每个文件上的事件。您将不得不将其设置为true或关闭应用程序(而不仅仅是文件)。

1

检查您是否没有引用缺少的库,如果是的话,只需取消选中它。我有类似的问题,这对我的情况有帮助。