我的Excel
插件(XLL AddIn,叫它MyAddIn
)是用 C#、ExcelDNA、NetOffice、VS2010 构建的。客户端有另一个插件(我们称之为B
),我猜它是用 VBA 编写的。客户说B
没有MyAddIn
. 一旦MyAddIn
安装,B
失败并出现错误:
错误代码:406 错误消息:无法在此宿主应用程序中从 ActiveX DLL、ActiveX 控件或属性页显示非模态表单。
我确实看到了这个 Microsoft 资源,但我不想只是告诉客户B
插件需要更改。我想做一些事情来避免这种情况发生。
以下是报告查看问题的步骤:
- 安装 B 插件后,它不会为 Microsoft
Excel
. - 安装后
MyAddin
,它会为 Microsoft 生成一个注册表项Excel
。 - 这里的注册表项基本上告诉插件应该在启动时打开
Excel
,所以B
插件没有启动,Excel
工作正常,MyAddIn
工作正常。 - 现在,当
B
插件启动时,它会给出上面显示的 406 错误。 - 我们可以忽略错误并继续使用
B
插件;禁用MyAddIn
是解决方法。 - 当
B
插件启动时,我们看到它MyAddIn
在插件之前先加载B
,然后得到 406 错误。 - 当我们卸载时
MyAddIn
,不再遇到此错误,一切正常。 - 为了消除此错误,我们尝试更改注册表顺序以使
B
插件始终在MyAddin
.- 这行得通,但这对 Microsoft 来说是一个全局更改
Excel
,这意味着B
插件将始终打开,即使我们仅启动Excel
。这是不希望的,因为B
插件不能让用户使用静态数据,因为B
插件会不断刷新实时。这就是B
插件不在注册表设置中创建条目的原因。因此,注册表更改不是一种选择。我们不能总是在打开B
时打开插件Excel
。
- 这行得通,但这对 Microsoft 来说是一个全局更改