我正嘗試從另一個工作簿上的一個工作簿運行VBA宏。
我正在使用Microsoft.Office.Interop.Excel(或等價物)對象(如果要使用它,請將引用(COM)添加到Microsoft Excel 12.0對象庫)以編輯和使用C#可執行文件中的Excel文檔。在其他工作簿上運行Excel宏
例如,文檔1中包含一些數據。文檔2包含用於格式化文檔1的宏。文件一是每天都有新的,所以我不能在那裏存儲宏。我試圖使用Excel.Application.Run()從文檔一中的文檔二運行一個宏。
我使用的示例宏很簡單(存儲在Microsoft Excel對象:的ThisWorkbook):
Sub Test()
Sheets("Sheet1").Select
Range("A1").Value = 32
End Sub
我需要這在不同的工作簿中運行。我可以用下面的代碼在同一個工作簿中運行它:
Application xlApp = new Application(); //Excel app
Workbook xlWbk = null;
try
{
xlWbk = xlApp.Workbooks.Open(DocumentTwoLocation);
xlApp.Run("'" + DocumentTwoLocation + "'!" + MacroName); //MacroName example: ThisWorkbook.Test
}
finally
{
if (xlWbk != null)
try
{
xlWbk.Close(true); //Saves changes
}
catch
{
xlWbk.Close(false);
}
xlApp.Quit();
}
當我更改xlApp.Workbooks.Open到DocumentOneLocation DocumentTwoLocation,宏將不會運行。拋出一個COMException(HRESULT:0x800A03EC),它是NameNotFound(僅在使用xlApp.Run()時引發)。文件地址是正確的。即使我打開這兩個文件,事先就像這樣:
Application xlApp = new Application(); //Excel app
Workbook xlWbk = null;
Workbook xlMacroBook = null;
try
{
xlWbk = xlApp.Workbooks.Open(DocumentOneLocation);
xlMacroBook = xlApp.Workbooks.Open(DocumentTwoLocation);
xlApp.Run("'" + DocumentTwoLocation + "'!" + MacroName); //MacroName example: ThisWorkbook.Test
}
finally
{
if (xlWbk != null)
try
{
xlWbk.Close(true); //Saves changes
}
catch
{
xlWbk.Close(false);
}
if (xlMacroBook != null)
xlMacroBook.Close(false) //Don't save changes
xlApp.Quit();
}
仍然出現錯誤(同樣0x800A03EC除外)。
MSDN對幾乎沒有什麼文件,我丟失或我應該怎麼處理這個類似(https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.applicationclass.run.aspx)
事情已經在這裏問: Error when calling Excel macro from C# ,我已經做了所有我可以匹配他們有什麼寫(包括添加ReleaseComObject,並設置爲null後),但無濟於事。