需要有关从新的 VTSO Word 插件调用宏的代码帮助

Need code help on calling a macro from a new VTSO addin for Word

我在 MVS 中创建了一个带功能区的新插件。单击 button1 我想 运行 存储在 Word 启动文件夹中的 .dotm 文件中的宏。 .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 文件中的宏所需的代码。

你的 VSTO 代码有一个 Microsoft.Office.Interop.Word.Application 对象。假设您将该引用存储在名为 hostApp 的变量中,您可以这样做:

hostApp.Run("TableMacro")

这要求 .dotm 文件是 "active" 文件。如果该文档未激活并且您有对它的引用(例如,theDocument),我认为这可能有效(未经测试):

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

VB.NET 使用的对象与 VBA 使用的对象相同,因此如果 Application.Run "MyMacros!TableMacro" 在 VBA 中工作,它也会在 VB.NET 中工作。我会先尝试 fiddle in VBA 以获得正确的语法 - 你会得到即时反馈,而不是需要构建和启动主机,加载加载项并使用 VSTO 测试它。

要从 VSTO 加载项搜索所有全局模板(包括 Building Block 模板),您可以使用:

        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

以这种方式执行的价值在于,您现在有一个对象变量设置为特定的全局模板,然后您可以获取自动图文集、样式等,当然还有存储在该特定全局模板中的宏。

以下 Run 语法对我有用,从 VSTO 加载项到作为加载项加载的模板中的 运行 VBA 代码。它使用模块名称加上宏名称。

请记住,Run 只能与 public 个订阅者一起使用...

Globals.ThisAddIn.Application.Run("Module1.TestPublicVarx")