【问题标题】:Windows XP Excel VBA Crashes on Windows 7Windows XP Excel VBA 在 Windows 7 上崩溃
【发布时间】:2012-07-17 09:25:02
【问题描述】:

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

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

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

一旦msinet 被取消注册,Excel VBA 打开我的工作簿,报告缺少引用msinet 并且根本不起作用。我该如何解决这个问题?

【问题讨论】:

  • 你试过在windows 7机器上编译你的代码吗?
  • 是的,我试过了。但是缺少参考,没有办法修复它。我想知道Win7/xp VBA代码是否存在兼容性问题。
  • 在打开工作簿或执行某些程序时是否崩溃?您是否检查过任何 API 调用的语法/参数更改?
  • 问题是打开工作簿。我想没有语法错误。 vba 代码也可以在 WinXp 操作系统上运行,我想 XP 和 7 之间不会发生语法变化。

标签: vba windows-7 excel-2007 windows-xp msinet


【解决方案1】:

检查您是否没有对丢失库的引用,如果是,请取消选中它。我有一个类似的问题,它对我的​​情况有所帮助。

【讨论】:

    【解决方案2】:

    msinet.ocx 未注册时系统不崩溃并不一定是问题所在。

    如果您在任何过程inside of 中调用了该库 (msinet.ocx) 或 ThisWorkbook 模块调用,并且您未注册该库,然后当文件打开并尝试运行 On open 宏时,模块将不会编译,因此不会运行导致其崩溃的代码行。 (我只是猜测这可能是你的情况。)

    尝试找出导致系统崩溃的确切调用。

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

    最终,您将到达导致系统崩溃的确切代码行。有了这些信息,您将能够获得更多帮助。

    注意:

    要在不激活宏的情况下打开文件,您可以使用以下方法之一:

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

    • 如果 Excel 应用程序已打开,则转到 VB 编辑器并在即时窗口中键入 application.EnableEvents=False(然后按 Enter 键运行它)。请注意,这将禁用该 Excel 实例中每个文件的事件。您必须将其设置回 true 或关闭应用程序(不仅仅是文件)。

    【讨论】:

      【解决方案3】:

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

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

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

      这大约有一半的时间。

      【讨论】:

      • 我已经尝试过您的解决方案。没有正面反馈。有两个事实让我感到困惑。如果未安装 msinet.ocx,则参考列表显然会将参考标记为缺失,但 Excel 不会崩溃,应用程序也不会工作。一旦安装 msinet.ocx 并打开 activeX,Excel 就会崩溃。没有缺少参考。我想 msinet 和 Win7 根本不兼容……对吗?
      • 您实际上在这里发现了一些东西:清理损坏的 Excel 文件的标准技术不会改变观察到的行为。所以你已经消除了问题的一个可能来源:它不是你的文件,它是 msinet.ocx - 我建议你的下一个调查是删除所有实例和对该 ocx 的引用,并查看文件是否稳定。
      猜你喜欢
      • 2011-08-05
      • 2011-03-21
      • 2011-04-09
      • 2014-07-07
      • 2021-02-04
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多