PowerPoint显示嵌入Excel图表对象时的“无法启动应用程序”错误
-
25-09-2019 - |
题
当Excel工作表或图表嵌入Word或PowerPoint时,这是一个非常普遍的问题。我在Word和PowerPoint中都看到了这个问题,其原因似乎是附加到Excel的COM addin。 com addin用c#(.net)编写。有关错误对话框,请参见附件的图像。
我调试了Addin,发现了一种非常奇怪的行为。 COM ADDIN中的OnConnection(...),OnDisconnection(...)等方法正常工作,直到我将事件处理程序添加到代码中为止。 IE处理Worksheet_sheetchange,SelectionChange或Excel中可用的任何类似事件。一旦我添加一个事件处理程序(尽管我的代码有几个),Word和PowerPoint就会开始抱怨,并且不会激活嵌入式对象。
在互联网上的某些帖子上,已要求人们删除抗病毒插件的办公室(在我的情况下没有),所以这使我相信问题与com addins有些相关,而com addins当主机应用程序激活时已加载了问题物体。
更新于2010年6月21日
发现当激活嵌入式对象时,事件和更改Comaddins收集都会产生问题。我现在使用Excel ::应用程序:: USERCONTROL属性来检查Excel是否处于嵌入式状态,然后跳过任何连接(...)和OnDisconnection(...)代码。
事件问题的一种解决方案可能是将所有应用程序级别事件移至VBA代码并致电.NET。从.NET代码中删除所有事件处理程序。
在某些情况下,嵌入式对象可能无法初始化,因此我选择禁用COM ADDIN IE IE在Connection(...)和OnDisconnection(...)方法中跳过代码。
解决方案
这是我为摆脱这个烦人的问题所做的:
删除.NET代码中的所有事件处理程序,并依靠VBA应用程序事件IE而不是处理Excel ::应用程序:: Worksheet_activate(...)事件,请在VBA模块中处理它们,然后在接收到事件时呼叫到ADDIN 。 .NET事件处理人员似乎以某种方式破坏了国家。
禁用使用自定义参数中的标志在Connection(...)中与Addin交互的任何代码。有关标志的详细信息,请参见以下链接:详细介绍
我提到了excel ::应用程序:: usercontrol属性,但在某些情况下它并不可靠。我们需要考虑以下情况,并且自定义数组参数是连接(...)是最可靠的:
- Excel作为独立应用开始
- Excel在其他应用程序中以嵌入式应用的启动
- Excel从自动化开始,例如CreateObject(...)
当Excel处于嵌入式模式时,我更喜欢完全禁用ADDIN。这取决于您在连接(...)中执行的代码以及执行时其他应用程序如何响应它。必须实施第1点以解决此问题。
如果有人对此有更好的解决方案,请告诉我:)