слово макрос называется из всто - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь выяснить, почему я не могу запустить макрос Microsoft Word, вызываемый из надстройки VSTO, написанной на VB.Каждая ссылка, которую я могу найти, говорит, что вы можете сделать это с помощью одной строки:

Application.Run("MacroName")

Сам макрос очень прост ... он просто переключает настройку «заменять текст по мере ввода» (AutoCorrect.ReplaceText= Не автозамена. Текст замены).Это работает отлично, когда вызывается из самого Word.Макрос связан с шаблоном normal.dotm, поэтому он доступен при каждом открытии Word.Я использую кнопку на ленте Word с обратным вызовом функции, которая, в свою очередь, вызывает макрос.

Public Function DisplayHelp(ByVal control As Office.IRibbonControl)

    'On Error Resume Next
    Dim wdApp As New Microsoft.Office.Interop.Word.Application        
    wdApp.Run("AC_Test")
    UpdateLabel()

End Function

Нажатие на кнопку не изменяет состояние параметра замены текста.Я немного неопытен в разработке надстроек, поэтому буду благодарен за любые предложения.

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

В надстройке VSTO не следует запускать новое приложение Word.Application.Вызов макроса выполняется в этом новом экземпляре Word, который вы не видите.Он не запускается в экземпляре приложения, в котором запущена надстройка VSTO, где вы нажали кнопку.

(Кроме того, запуск нового экземпляра Word может привести к тому, что вы оставите «осиротевшие» экземпляры winword.exe).запуск, который не очищается (утечка памяти), поскольку вы не обрабатываете / не освобождаете объект, пока вы нам его показываете.)

Для того, чтобы обратиться к приложению Word.Application из вашего VSTO add-используется Globals.ThisAddin.Application.Так, например:

 Word.Application wdApp = Globals.ThisAddin.Application
 wdApp.Run("AC_Test")

Ссылка в документации по MSDN: Глобальный доступ к объектам в проектах Office и Программные надстройки VSTO

Обратите внимание, что иногда в Word неясно, где находится макрос.В таких случаях вам может потребоваться указать имя модуля макроса или даже полный путь к точке, содержащей макрос.Это, вероятно, не будет проблемой с Normal.dotm, однако ...

0 голосов
/ 02 июня 2018

Убедитесь, что саб VBA объявлен в модуле VBA по умолчанию.Подробнее об этом можно прочитать в статье Interop Between VBA и Visual Studio Office Solutions (VSTO) .

Также иногда помогает указать все параметры, явно передавая Type.Missing для значений по умолчанию.Например:

 Application.Run("Test",
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Обратите внимание, ваш сабвуфер VBA должен быть объявлен как открытый.

См. Application.Run для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...