我正尝试从另一个工作簿上的一个工作簿运行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后),但无济于事。