gpt4 book ai didi

excel - 如何防止 Excel VBA 错误 : An unhandled win32 exception occurred in EXCEL. EXE [14756]

转载 作者:行者123 更新时间:2023-12-02 11:49:29 26 4
gpt4 key购买 nike

我工作的客户最近将所有笔记本电脑升级到运行 Windows 10(版本 10.0.16299)和 Office 2016 的 Microsoft Surface:Microsoft Excel 2016 MSO (16.0.9126.2295) 64 位Microsoft Office 365 专业增强版

我正在开发一个 Excel VBA 应用程序,该应用程序在旧笔记本电脑上运行良好,但现在开始导致 Excel 崩溃,并出现以下错误:EXCEL.EXE 中发生未处理的 win32 异常 [14756]

Excel 崩溃时会显示不同的对话框消息:Microsoft Excel 已停止工作Windows 错误报告已停止工作

另一篇论坛帖子建议检查 Windows 事件查看器以获取错误崩溃报告的日志。这给了我以下详细信息:

错误应用程序名称:EXCEL.EXE,版本:16.0.9126.2295,时间戳:0x5bafc794错误模块名称:MSCOMCTL.OCX,版本:0.0.0.0,时间戳:0x5984a51c异常代码:0xc0000005故障偏移:0x0000000000021f8f错误进程 ID:0x42c8错误的应用程序启动时间:0x01d47124a3a41f4c错误应用程序路径: C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE错误模块路径: C:\windows\system32\MSCOMCTL.OCX报告 ID:74d9c093-61f0-4616-b20b-dc7f2acda9a5错误包全名:错误的包相关应用程序 ID:

我一直在使用我收集的信息在众多论坛中搜索解决方案,但到目前为止一无所获。

我已将问题隔离到特定用户操作(单击 ListView 控件)。该控件被添加到应用程序中以替换表单上以前的列表框控件,以便允许在选择项目时将字体颜色设置为红色。自从迁移到 Surface 笔记本电脑后,此 ListView 控件似乎引发了冲突,从而导致 Excel 崩溃。我非常确定。禁用 ListView 控件并将应用程序设置为使用 ListBox 控件似乎已经解决了该问题。

我希望这对其他人有帮助。如果有人能解释为什么 Excel 实际上崩溃了,我将不胜感激,因为我只觉得我有一个解决方法,而不是修复。

我想知道 64 位与 32 位驱动程序/dll 文件是否存在冲突。正在使用的 VBA 引用是: VBA References标记

最佳答案

感谢@jkpieterse 和@Comintern 的建议。

问题的原因被确定为在使用 32 位控件和 VBA 代码时迁移到 Excel 2016 64 位。

最后,我们必须做出一些更改来防止 Excel 崩溃。

1) 删除对 ListView 对象的所有代码和对象引用。

2) 请遵循此 Microsoft 文章中的指南,确保 VBA 与 Office 2016 64 位兼容:https://learn.microsoft.com/en-us/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office

3) 我们最终联系了 Microsoft 支持人员,他们建议我们在以下位置安装一个新的注册表项,以避免 Excel 崩溃的问题:

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options\

名称:ForceVBALoadFromSource类型:DWORD
值 = 1

(请参阅知识库文章:https://support.microsoft.com/en-gb/help/4011597/december-5-2017-update-for-excel-2013-kb4011597)他们解释说,这是 Microsoft 推出的一个修复程序,旨在强制 Excel 在 64 位系统上完全编译 VBA,从而防止 32 位代码部分编译时出现问题。

显然,在应用此修复之前,您应该备份注册表并创建一个还原点(如果有的话,请咨询您的技术部门!)

在调用支持之前,我已将崩溃点缩小到调用特定表单的时间。在此之前,VBA 代码运行良好,已成功与 SQL Server 数据库建立 ADODB 连接并返回数据。当调用该表单时,应用程序崩溃了。如果我加载不同的表单,应用程序不会崩溃,这意味着存在其他控件或代码导致编译错误或冲突。

此外,我发现如果 Visual Studio 编辑器窗口已打开,应用程序不会崩溃。我能够添加一行代码以编程方式打开 VBE 窗口(加上一些代码来调整其大小,这样它就不会隐藏表单):

Application.VBE.MainWindow.Visible = True
With Application.VBE.MainWindow
.Width = 500
.Height = 500
End With

添加此代码后,应用程序也没有崩溃。

问题形式太复杂,如果没有大量的开发成本就无法重新创建。幸运的是,微软的修复已经解决了这个问题。

关于excel - 如何防止 Excel VBA 错误 : An unhandled win32 exception occurred in EXCEL. EXE [14756],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com