Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止Excel VBA错误:Excel.EXE[14756]中发生未经处理的win32异常_Excel_Vba_Windows 10_Excel 2016 - Fatal编程技术网

如何防止Excel VBA错误:Excel.EXE[14756]中发生未经处理的win32异常

如何防止Excel VBA错误:Excel.EXE[14756]中发生未经处理的win32异常,excel,vba,windows-10,excel-2016,Excel,Vba,Windows 10,Excel 2016,我工作的客户最近将所有笔记本电脑升级到运行windows 10(版本10.0.16299)和Office 2016的Microsoft Surface: Microsoft Excel 2016 MSO(16.0.9126.2295)64位 Microsoft Office 365 ProPlus 我正在开发一个Excel VBA应用程序,该应用程序在旧笔记本电脑下运行良好,但现在已开始崩溃Excel,出现以下错误: EXCEL.EXE[14756]中发生未经处理的win32异常 有不同的对话框

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

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

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

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

故障应用程序名称:EXCEL.EXE,版本:16.0.9126.2295,时间戳:0x5bafc794 故障模块名称:MSCOMCTL.OCX,版本:0.0.0.0,时间戳:0x5984a51c 异常代码:0xc0000005 故障偏移量:0x000000000001f8f 出错进程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控件。此控件被添加到应用程序中,以替换表单上以前的Listbox控件,以便在选择项目时将字体颜色设置为红色。由于移动到Surface笔记本电脑,此ListView控件似乎导致冲突,导致Excel崩溃。我不能再肯定了。禁用ListView控件并将应用程序设置为使用ListBox控件似乎已解决该问题

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

我想知道是否与64位v 32位驱动程序/dll文件存在冲突。正在使用的VBA参考包括:
马克

感谢@jkpieterse和@Comintern的建议

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

最后,为了防止Excel崩溃,我们不得不进行一些更改

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

2) 这篇Microsoft文章中的以下准则可确保VBA与Office 2016 64位兼容:

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

HKEY\U当前\U用户\软件\ Microsoft\Office\16.0\Excel\Options\

名称:ForceVBALoadFromSource 类型:DWORD
值=1

(请参阅知识库文章:) 他们解释说,这是微软推出的一个修复方案,旨在强制Excel在64位系统上完全编译VBA,从而防止32位代码部分编译时出现问题

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

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

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

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


问题形式太复杂,如果开发成本不高,就无法重新创建。幸运的是,Microsoft修复程序解决了这个问题

最近,当从外接程序调用子程序时,我遇到了类似的崩溃问题。手动调试时,代码运行良好。我们使用的是Excel 2016,32位版本。我发现问题与外接程序中的未编译代码有关。使用VBA编辑器中的Debug->Compile VBAProj重新编译所有代码后,错误消失。

我希望您使用的是32位版本的listview控件,并且您声明用户具有64位Office。这就是我所期望的根本原因。我似乎忽略了这个问题。是“为什么64位Excel在使用20年前弃用的32位控件时崩溃”?如果是这样的话,答案在您的错误报告中-0xc0000005是访问冲突。@谢谢您,我会调查是否有64位版本可用。@Comintern您似乎比我更了解错误代码。在我发布的windows日志中,我可能看到了六个错误代码,并坦率地承认我不知道其中哪些与识别问题和解决方案相关或有帮助。我没有意识到MSCOMCTL.OCX是VBA参考中提到的一个文件,它有助于确认哪个驱动程序/参考文件是问题所在。
Application.VBE.MainWindow.Visible = True
With Application.VBE.MainWindow
    .Width = 500
    .Height = 500
End With