2017-02-03 10 views
2

В моем приложении я открываю файл .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 в моем макросе? При запуске макроса он работает отлично. Он просто не работает, когда запускается через код.

+0

Является 'FileWithMacro.xlsm' открыт с сервера до этого? – R3uK

+0

@ R3uK Да, я открываю его непосредственно на сервере. –

+0

Странно, что он не обнаружен, если он открыт ... Вы можете попробовать переименовать VBAProject в 'FileWithMacro.xlsm' и вызвать прямо так, как этот' [MyProject.vbp]. [MyModule] .MyMacro' – R3uK

ответ

0

Я не мог понять, почему я получил исключение. Однако я нашел обходное решение. Перед выполнением макроса я скопирую FileWithMacro.xlsm в местоположение в сообщении об ошибке. Когда я использовал код, как у меня, у меня есть сообщение, что FileWithMacro.xlsm уже используется. Чтобы это исправить, я просто должен был передать Excel.Application моему методу и использовать этот экземпляр вместо создания нового один:

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

 Смежные вопросы

  • Нет связанных вопросов^_^