在我的应用程序中,我打开一个带有宏的.xlsm文件(将数据复制到.xlsm文件)和一个执行该宏的.xlsx文件。假设我的文件名为FileWithMacro.xlsmFileThatExecutesMacro.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'。


尽管我将所有路径都更改为正确的服务器位置(而且我确实确定我的代码和宏中都没有本地路径了)。我什至删除了我的binobj文件夹并重建了项目,但这并没有什么改变。我什至创建了一个新项目,并在不使用本地路径的情况下构建了该项目,但出现了同样的错误。我究竟做错了什么?默认情况下,excel.Run是否在Documents文件夹中搜索宏?

还是由于宏中的Windows("FileWithMacro.xlsm").Activate行导致了问题?手动运行宏时,它可以正常工作。通过代码运行它只是行不通。

最佳答案

我不知道为什么我得到了例外。但是,我找到了一种解决方法。在执行宏之前,我将FileWithMacro.xlsm复制到错误消息中的位置。然后,当我像以前那样使用代码时,我收到一条消息,提示FileWithMacro.xlsm已经在使用中。为了解决这个问题,我只需要将Excel.Application传递给我的方法,并使用该实例而不是创建一个新实例:

private static void RunMacro(Excel.Application excel, string source)

09-28 14:27