我使用 C# WinForms 应用程序从我的 C# WinForms 应用程序中启动 Excel Process.Start(...)
(这是有原因的)。我想在后台启动它,而不会分散用户的注意力,所以我尝试以最小化或隐藏的方式启动它。在这两种情况下,我都会遇到一个非常奇怪的行为:
几秒钟后,Excel 恢复窗口(如果它被隐藏,甚至使其可见)然后崩溃说:“Microsoft Office Excel 遇到问题,需要关闭。(Win XP 崩溃消息。)”
如果我通过双击桌面上的快捷图标手动启动 Excel,然后立即切换到另一个应用程序窗口,则会发生同样的事情,这样Excel 窗口在启动过程中就会失去焦点。
仅当任何XLA 加载项包含 UserForm时,才会出现此问题。如果我删除用户窗体,问题就会消失。如果我删除加载项,问题就会消失。
任何帮助表示赞赏,只要它是
- 解释为什么会发生这种情况
- 我可以在加载项中更改的内容
- 一种解决此错误的方法(不使用 COM)
- 不建议使用 COM。(请参阅此处以了解我为什么不这样做。)
- 不是更新 Excel 的建议(我不能)
重现步骤:
- 使用空工作簿启动 Excel 2007。
- 另存为...
- 文件类型:Excel 2003 加载项 (*.xla)
- 位置:%APPDATA%\Microsoft\Excel\XLSTART\foobar.xla
- Alt + F11(打开 VBA 编辑器)
- 将用户窗体添加到项目中。
保存并退出 Excel
启动 Excel,然后立即单击 Firefox 或任务栏中的任何选项卡以激活 Excel 以外的任何窗口。
- 等待并观察 Excel 启动,直到它崩溃。
重新启动 Excel 后,它说:
Excel 在使用“foobar”加载项时遇到了严重问题。如果您多次看到此消息,则应禁用此加载项并检查是否有可用更新。是否要禁用此加载项?
细节/发现:
- Excel 版本:12.0.6535.5002,SP2 MSO 12.0.6425.1000
- 0xA3 在他的评论中报告他可以使用 Excel 12.0.6535.5002、SP2 MSO 12.0.6535.5002 在 32 位机器上重现它
- 我尝试过使用 2007 插件 (XLAM)。同样的问题,除了如果它不包含任何用户窗体,它甚至会崩溃。
- 0xA3 报告说在他的 64 位机器上它可以工作,但是 Excel 仍然意外弹出(但没有崩溃)。到目前为止,我的测试人员的两台机器也是如此。
这是我想在 C# 中使用的代码(请注意,可以完全独立于任何 C# 应用程序来重现该问题,请参见上文)。
Process.Start(new ProcessStartInfo("excel.exe")
{ WindowStyle = ProcessWindowStyle.Minimized });