在我的应用程序中,我打开一个带有宏的.xlsm文件(将数据复制到.xlsm文件)和一个执行该宏的.xlsx文件。假设我的文件名为FileWithMacro.xlsm
和FileThatExecutesMacro.xlsx
。我在服务器上需要此应用程序,但已在本地开发它。为了调试该应用程序,我将文件放入C:\Users\myUser\Documents\
。
我这样打开FileWithMacro.xlsm
:
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(serverPath + "FileWithMacro.xlsm");
Excel._Worksheet worksheet = workbook.Sheets["FileThatExecutesMacro"];
之后,我调用运行宏的方法:
RunMacro(serverPath + "FileThatExecutesMacro.xlsx");
我的方法如下所示:
private static void RunMacro(string source)
{
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(source);
Excel._Worksheet worksheet = workbook.Sheets[1];
worksheet.Activate();
try
{
excelThatRunsMacro.Run("FileWithMacro.xlsm!MyMacro");
workbook.Save();
excelThatRunsMacro.Quit();
}
// and so on
}
在本地,宏可以正常工作。当我更改所有路径并将代码输出复制到服务器(\\ myServer \ someUrl ...)时,出现以下异常:
找不到'C:\ Users \ myServerUser \ Documents \ FileWithMacro.xlsm'。
尽管我将所有路径都更改为正确的服务器位置(而且我确实确定我的代码和宏中都没有本地路径了)。我什至删除了我的
bin
和obj
文件夹并重建了项目,但这并没有什么改变。我什至创建了一个新项目,并在不使用本地路径的情况下构建了该项目,但出现了同样的错误。我究竟做错了什么?默认情况下,excel.Run
是否在Documents
文件夹中搜索宏?还是由于宏中的
Windows("FileWithMacro.xlsm").Activate
行导致了问题?手动运行宏时,它可以正常工作。通过代码运行它只是行不通。 最佳答案
我不知道为什么我得到了例外。但是,我找到了一种解决方法。在执行宏之前,我将FileWithMacro.xlsm
复制到错误消息中的位置。然后,当我像以前那样使用代码时,我收到一条消息,提示FileWithMacro.xlsm
已经在使用中。为了解决这个问题,我只需要将Excel.Application
传递给我的方法,并使用该实例而不是创建一个新实例:
private static void RunMacro(Excel.Application excel, string source)