【发布时间】:2012-01-20 16:01:06
【问题描述】:
我的Excel 插件(XLL 插件,叫它MyAddIn)是用 C#、ExcelDNA、NetOffice、VS2010 构建的。客户端有另一个插件(我们称之为B),我猜它是用VBA编写的。
客户说B 没有MyAddIn 可以正常工作。一旦安装了MyAddIn,B 就会失败并出现错误:
错误代码:406 错误消息:无法通过 ActiveX DLL、ActiveX 控件或属性页在此宿主应用程序中显示非模态表单。
我确实看到了this Microsoft resource,但我不想只是告诉客户B 插件需要更改。我想做点什么来避免这种情况发生。
这是报告查看问题的步骤:
- 安装 B 插件后,它不会为 Microsoft
Excel创建任何注册表项。 - 安装
MyAddin后,它会为MicrosoftExcel创建一个注册表项。 - 这里的注册表项基本上告诉应该在
Excel启动时打开插件,所以B插件没有启动,Excel工作正常,MyAddIn工作正常。 - 现在当
B插件启动时,它会给出如上所示的 406 错误。 - 我们可以忽略错误并继续使用
B插件;禁用MyAddIn是解决方法。 - 当
B插件启动时,我们看到MyAddIn在B插件之前先加载,然后得到406错误。 - 当我们卸载
MyAddIn时,不再遇到此错误,一切正常。 - 为消除此错误,我们尝试更改注册表顺序以使
B插件始终在MyAddin之前打开。- 这可行,但这是 Microsoft
Excel的全局更改,这意味着B插件将始终打开,即使我们仅启动Excel。这是不希望的,因为B插件不能让用户使用静态数据,因为B插件会不断刷新实时。这就是B插件不在注册表设置中创建条目的原因。因此,注册表更改不是一种选择。当Excel打开时,我们不能总是打开B插件。
- 这可行,但这是 Microsoft
【问题讨论】:
-
如错误消息中所述,MyAddIn 试图显示非模态表单,从而导致问题。你需要弄清楚它是什么形式。如果您可以发布一些代码也会有所帮助。
标签: c# excel excel-addins activex-exe vba