当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当主机应用程序激活时已加载了问题物体。

有人知道这里发生了什么吗?PowerPoint Error

Word Error

更新于2010年6月21日


发现当激活嵌入式对象时,事件和更改Comaddins收集都会产生问题。我现在使用Excel ::应用程序:: USERCONTROL属性来检查Excel是否处于嵌入式状态,然后跳过任何连接(...)和OnDisconnection(...)代码。

事件问题的一种解决方案可能是将所有应用程序级别事件移至VBA代码并致电.NET。从.NET代码中删除所有事件处理程序。

在某些情况下,嵌入式对象可能无法初始化,因此我选择禁用COM ADDIN IE IE在Connection(...)和OnDisconnection(...)方法中跳过代码。

有帮助吗?

解决方案

这是我为摆脱这个烦人的问题所做的:

  1. 删除.NET代码中的所有事件处理程序,并依靠VBA应用程序事件IE而不是处理Excel ::应用程序:: Worksheet_activate(...)事件,请在VBA模块中处理它们,然后在接收到事件时呼叫到ADDIN 。 .NET事件处理人员似乎以某种方式破坏了国家。

  2. 禁用使用自定义参数中的标志在Connection(...)中与Addin交互的任何代码。有关标志的详细信息,请参见以下链接:详细介绍

我提到了excel ::应用程序:: usercontrol属性,但在某些情况下它并不可靠。我们需要考虑以下情况,并且自定义数组参数是连接(...)是最可靠的:

  1. Excel作为独立应用开始
  2. Excel在其他应用程序中以嵌入式应用的启动
  3. Excel从自动化开始,例如CreateObject(...)

当Excel处于嵌入式模式时,我更喜欢完全禁用ADDIN。这取决于您在连接(...)中执行的代码以及执行时其他应用程序如何响应它。必须实施第1点以解决此问题。

如果有人对此有更好的解决方案,请告诉我:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top