Нужна помощь с кодом при вызове макроса из нового VTSO надстройки для Word - PullRequest
0 голосов
/ 15 марта 2019

Я создал новый плагин с лентой в MVS.При нажатии кнопки 1 я хочу запустить макрос, который хранится в файле .dotm в папке автозагрузки в Word.Файл .dotm называется MyMacros, а макрос - «TableMacro».

Имя модуля в Word называется NewMacros, а верхние строки макроса в Word:

Sub TableMacro()
`
` TableMacro

Я уверен, что макрос запускается с кодом ниже, но даже это предположение:

Private Sub Button1_Click_1(sender As Obeject, e As RibbonControlEventArgs) Handles Button1.Click
`code to call TableMacro'
End Sub

Я знаю, как писать макросы, но я понятия не имею, код, необходимый для запуска макроса, хранящегося в MyMacros.dotmфайл.

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Чтобы выполнить поиск по всем глобальным шаблонам, включая шаблон Building Block, из надстройки VSTO, вы можете использовать это:

        Dim wApp = Globals.ThisAddIn.Application
        Dim i As Integer, Tmplt As Word.Template = Nothing
        For i = 1 To wApp.Templates.Count
            If wApp.Templates(i).Name = "MyMacros.dotm" Then
                Tmplt = wApp.Templates(i)
                wApp.Run(Tmplt.Name & "!TableMacro")
            End If
        Next

Ценность выполнения этого способа заключается в том, что теперь у вас есть переменная объектаустановить конкретный глобальный шаблон, и затем вы можете получить доступ к автотексту, стилям и т. д. и, конечно, макросам, которые хранятся в этом конкретном глобальном шаблоне.

0 голосов
/ 16 марта 2019

Следующий синтаксис Run работал для меня из надстройки VSTO для запуска кода VBA в шаблоне, загруженном как надстройка. Он использует имя модуля плюс имя макроса.

Имейте в виду, что Run может работать только с общедоступными подпрограммами ...

Globals.ThisAddIn.Application.Run("Module1.TestPublicVarx")
0 голосов
/ 15 марта 2019

Ваш код VSTO имеет объект Microsoft.Office.Interop.Word.Application. Скажем, вы храните эту ссылку в переменной с именем hostApp, вы можете сделать это:

hostApp.Run("TableMacro")

Для этого требуется, чтобы файл .dotm был «активным» документом. Если документ не активен и у вас есть ссылка на него (скажем, theDocument), я думаю это может сработать (не проверено):

hostApp.Run(theDocument.Name & "!TableMacro")

Объект, который использует VB.NET, тот же, что и VBA, поэтому, если Application.Run "MyMacros!TableMacro" работает в VBA, он будет работать в VB.NET. Сначала я попытался бы разобраться в VBA, чтобы получить правильный синтаксис - вы получаете мгновенную обратную связь, а не сборку и запуск хоста, загрузку надстройки и тестирование с помощью VSTO.

...