c# - 通过服务器 : Wrong path to excel file? 上的代码运行宏

标签 c# vba excel path

在我的应用程序中,我打开一个带有宏的 .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' could not be found.

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

或者问题是因为我的宏中的 Windows("FileWithMacro.xlsm").Activate 行?手动运行宏时,它工作正常。通过代码运行它时它只是不起作用。

最佳答案

我无法找出为什么会出现异常。但是,我找到了解决方法。在执行宏之前,我将 FileWithMacro.xlsm 复制到错误消息中的位置。当我像以前一样使用代码时,我收到一条消息,提示 FileWithMacro.xlsm 已在使用中。要解决此问题,我只需将 Excel.Application 传递给我的方法并使用此实例而不是创建新实例:

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

关于c# - 通过服务器 : Wrong path to excel file? 上的代码运行宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42026372/

相关文章:

c# - 使用 LINQ 的 .Cast() 运算符时,显式/隐式转换运算符失败

c# - OpenXML:用 WordprocessingML 中的表替换 <sdt/> 元素

excel - VBA 返回包含特定字符串的单元格的索引

java - 如何在java中通过Apache POI Excel输出大型csv文件?

Excel - 根据所选月份求和 QTD 值

c# - 为什么 TempData 由 Session 支持

c# - 大型无向图的高效存储、查找和操作

Excel VBA - 将列表中的值 append 到每日变化的数据上

excel - 循环移动 Excel 文件中的按钮,不包括某些工作表

vba - 在 UserForm 中声明变量并在类模块中使用它们