В моем приложении я открываю файл .xlsm с макросом (копирует данные в файл .xlsm) и файл .xlsx, который выполняет этот макрос. Скажем, мои файлы называются FileWithMacro.xlsm
и FileThatExecutesMacro.xlsx
. Мне нужно это приложение на сервере, но оно разработано локально. Чтобы отладить приложение, я поместил свои файлы в C:\Users\myUser\Documents\
.Запуск макросов через код на сервере: Неверный путь к файлу excel?
Я открываю 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' открыт с сервера до этого? – R3uK
@ R3uK Да, я открываю его непосредственно на сервере. –
Странно, что он не обнаружен, если он открыт ... Вы можете попробовать переименовать VBAProject в 'FileWithMacro.xlsm' и вызвать прямо так, как этот' [MyProject.vbp]. [MyModule] .MyMacro' – R3uK