Выполнить макрос VBA через C# Interop?
Просто интересно, кто-нибудь может подсказать, почему я могу получить ошибку? В настоящее время я пытаюсь выполнить макрос в книге, вызывая метод Application.Run, который предоставляет взаимодействие.
В настоящее время выдается следующее исключение COM:
{System.Runtime.InteropServices.COMException (0x800A03EC): Cannot run the macro Macro1'.
The macro may not be available in this workbook or all macros may be disabled.
Я поместил содержащуюся книгу в надежное место, установил все параметры безопасности на минимальные значения и доверил программный доступ к моей объектной модели. У меня совершенно нет идей, и Google до сих пор меня не подводил!
Кто-нибудь сделал это, или вы можете предложить что-нибудь, что я мог бы попробовать?
Большое спасибо!
5 ответов
Оказалось, что на самом деле в рабочую книгу были вставлены два макроса с одинаковыми именами. Вышеуказанное исключение переводится как ошибка "Ошибка компиляции: обнаружено неоднозначное имя" в VBA - мне следовало бы перейти непосредственно к VBA, чтобы посмотреть на это, а не предполагать, что с взаимодействием происходило что-то странное.
Если макрос хранится в личной рабочей книге, вам может потребоваться указать имя рабочей книги: personal.xls! Macroname
Хотя на это уже ответили, у меня были ТО ЖЕ симптомы. Наконец, я решил проблему с этим исправлением Microsoft
Я столкнулся с той же проблемой, макрос хранится в "модуле" с именем "MainModule".
Я старался
App.Run("Abc.xlsm!CalcSomething");
App.Run("MainModule!CalcSomething");
App.Run("Abc.xlsm.CalcSomething");
App.Run("MainModule.CalcSomething");
App.Run("CalcSomething);
Ничего не сработало.
Та же проблема возникает при вызове некоторых сторонних макросов с помощью Interop, и это связано с тем, что надстройки не будут правильно зарегистрированы в Excel. Для этого случая это может быть полезно: