我试图找出为什么我无法运行用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
单击该按钮不会更改替换文本设置的状态。我对插件开发有点缺乏经验,所以感谢任何建议。
由于
答案 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 projects和Program VSTO Add-ins
请注意,有时Word不清楚宏的位置。在这种情况下,您可能需要包含宏的模块名称,甚至包含宏的dotm的完整路径。这不太可能是Normal.dotm的问题,但是......