从vsto调用的词宏

时间:2018-06-01 20:47:48

标签: vba ms-word vsto word-vba

我试图找出为什么我无法运行用VB编写的VSTO加载项调用的Microsoft Word宏。我能找到的每一个参考文献都说你可以用一行代码来做到这一点:

Application.Run("MacroName")

宏本身非常简单......它只是在您输入'时切换'替换文字。设置(AutoCorrect.ReplaceText = Not 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 :(得分:0)

确保在默认VBA模块中声明VBA sub。您可以在Interop Between VBA and Visual Studio Office Solutions (VSTO)文章中详细了解相关内容。

有时也有助于指定显式传递function max(){ var a=parseInt(document.getElementById("num1").value)||-10000; var b=parseInt(document.getElementById("num2").value)||-10000; var c=parseInt(document.getElementById("num3").value)||-10000; var max = 0; var end = Math.max(a, b, c); if (end == -10000) { alert("Input at least one number"); } else { alert(end); } } 默认值的所有参数。例如:

Type.Missing

注意,您的VBA sub应声明为public。

有关详细信息,请参阅Application.Run

答案 1 :(得分:0)

在VSTO加载项中,您不应该启动新的Word.Application。宏调用正在您未看到的这个新Word实例中运行。它没有在您运行VSTO加载项的应用程序实例中运行,您点击了该按钮。

(另外,启动Word的新实例可能会使winword.exe运行的“孤立”实例未被清除(内存泄漏),因为您没有处理/释放对象,因为你告诉我们。)

要在VSTO加载项中使用Globals.ThisAddin.Application解决Word.Application问题。所以,例如:

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

MSDN上的文档资料中的参考:Global access to objects in Office projectsProgram VSTO Add-ins

请注意,有时Word不清楚宏的位置。在这种情况下,您可能需要包含宏的模块名称,甚至包含宏的dotm的完整路径。这不太可能是Normal.dotm的问题,但是......