需要有关从新的 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")
我在 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")