通过C#Interop执行VBA宏?

时间:2009-01-09 16:56:26

标签: c# vba interop

只是想知道是否有人可以建议我为什么会收到错误?我正在尝试通过调用互操作公开的Application.Run方法来在工作簿中执行宏。

目前正在抛出以下COM异常:

{System.Runtime.InteropServices.COMException (0x800A03EC): Cannot run the macro Macro1'. 
The macro may not be available in this workbook or all macros may be disabled.

我将包含的工作簿放在受信任的位置,将所有安全设置设置为最小值,并对我的对象模型进行受信任的编程访问。到目前为止,我完全没有想法,谷歌让我失望了!

有没有人这样做过,或者你能推荐一些我可以尝试的东西吗?

非常感谢!

5 个答案:

答案 0 :(得分:1)

事实证明,实际上有两个同名的宏被注入到工作簿中。上面的例外转换为VBA中的“编译错误:检测到模糊名称”错误 - 我应该直接进入VBA来查看它,而不是假设互操作发生了奇怪的事情。

答案 1 :(得分:0)

如果宏存储在个人工作簿中,您可能必须引用工作簿名称:personal.xls!macroname

答案 2 :(得分:0)

虽然已经回答,但我有同样的症状。最后,我用this hotfix of Microsoft

解决了这个问题

答案 3 :(得分:0)

使用Interop调用某些第三方宏时会弹出同样的问题,这是因为addins无法在Excel中正确注册。对于这种情况,这可能会有所帮助:

How to load an Excel Addin using Interop

答案 4 :(得分:0)

我遇到了同样的问题,Macro存储在"模块"命名为" MainModule"。

我试过

App.Run("Abc.xlsm!CalcSomething");

App.Run("MainModule!CalcSomething");

App.Run("Abc.xlsm.CalcSomething");

App.Run("MainModule.CalcSomething");

App.Run("CalcSomething);

没有任何效果。