使用外部c#控制台应用程序在Excel工作表中运行VBAmacros

我正试图调用Excel文件中的一个macros。 下面是我得到的代码,但是在下面运行它抛出exception,以下面的消息。

码:

// Define your Excel Objects Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkBook = null; try { //Start Excel and open the workbook. xlWorkBook = xlApp.Workbooks.Open(@"C:\MyFolder\Junk\macro\xxxxxReport.xlsm"); //Run the macros by supplying the necessary arguments xlApp.Run("LookupHLink"); //xlWorkBook.Save(); //Clean-up: Close the workbook xlWorkBook.Close(false); //Quit the Excel Application xlApp.Quit(); } catch (Exception ex) { } finally { //~~> Clean Up releaseObject(xlApp); releaseObject(xlWorkBook); } 

macros没有参数。

 Public Sub LookupHLink() 

错误信息:

无法运行macros'LookupHLink'。 macros可能不在此工作簿中可用或所有macros可能被禁用。

如果我做错了,请告诉我。

据我所知,这个错误的可能原因是:

  • 系统find该文件,但无法加载它。
  • 该文件已加载,但没有macros。
  • 该文件已加载,但macros被禁用。
  • 该文件被加载,macros存在…但你拼错了名字。

鉴于可用的信息,似乎是更可能的原因是禁用macros。


您可以尝试将您的文件移动到受信任的位置:

点击文件>选项,然后点击信任中心>信任中心设置>信任位置。

请参阅在Excel中更改macros安全设置 [2010]。


您也可以尝试更改安全设置:

在Excel 2007中

  • 单击Microsoft Officebutton,然后单击Excel选项。
  • 点击信任中心。
  • 点击信任中心设置。
  • 点击macros设置。
  • 单击以选中对VBA项目对象模型的信任访问checkbox。
  • 单击确定closuresExcel选项对话框。

源: 当您以编程方式允许在Microsoft Excel基础上访问Excel 2003和Excel 2007中的Visual Basic项目时,您可能会收到运行时错误 。


注意:在C#中的可选参数是一个相对较新的function…您可以尝试旧的方式,并使用Type.Missing来填补臭名昭着的30 方法的参数。 像这样的东西:

 xlApp.Run('macro', Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);