Выполнить макрос 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. Для этого случая это может быть полезно:

Как загрузить надстройку Excel с помощью Interop

Другие вопросы по тегам