在C#中运行特定工作簿中的Excelmacros失败

我试图在C#中使用标准的Microsoft.Office.Interop.Excel库在Excel工作簿中运行一个macros。 在我的情况下,Excel的版本可能是2010年或2013年。

可能有多个工作簿为相同的应用程序对象打开,每个可能具有相同的macros名称,所以我显式传入工作簿名称

string macro = string.Format("{0}!{1}", workbook.Name, macroName); Application.Run(macro); 

奇怪的是,如果工作簿名称中有连字符,我会得到一个COMException:

 Application.Run("My-Workbook!macro1") 

但没有连字符运行正常:

 Application.Run("MyWorkbook!macro1") 

这只是我还是这个奇怪? 任何人都可以想到一个解决方法?

将工作簿名称用引号括起来

 string macro = string.Format("'{0}'!{1}", workbook.Name, macroName); Application.Run(macro);