通过应用程序传递参数。在Word VBA中运行

通过应用程序传递参数。在Word VBA中运行,vba,ms-word,Vba,Ms Word,我在我的Word Addin(.dotm)中定义了以下两个子项,我将它们放在启动目录中 Public Sub SayHi1() MsgBox "Hi......." End Sub Public Sub SayHi2(ByVal n As String) MsgBox "Hi " & n End Sub 然后,根据一份新文件,我可以调用第一个子节点,无需参数,如下所示: Sub AppRun_AddIn_NoArg() Application.Run "MyP

我在我的Word Addin(.dotm)中定义了以下两个子项,我将它们放在启动目录中

Public Sub SayHi1()
    MsgBox "Hi......."
End Sub

Public Sub SayHi2(ByVal n As String)
    MsgBox "Hi " & n
End Sub
然后,根据一份新文件,我可以调用第一个子节点,无需参数,如下所示:

Sub AppRun_AddIn_NoArg()
    Application.Run "MyProject.Module1.SayHi1"
End Sub
但是,当我尝试使用参数运行第二个子对象时,我得到一个错误,即“对象不支持此属性或方法”

错误消息:
这似乎是Word长期存在的问题

作为:

原因:
您已将模板名称作为宏名称参数字符串的一部分

分辨率:
从宏名称参数中删除模板名称

解决方法:
若要避免引用项目之间的命名冲突,请为过程指定唯一的名称,以便在不指定项目或模块的情况下调用过程


出于某种原因,如果您删除
MyProject
位,它会起作用,但很明显,您最终可能会调用错误的宏。显然这与此有关。您不使用Call有什么原因吗?@GSerg是的,没有项目名称和模块名称,它就起作用了。@jbarker2160:没有具体原因。使用Call有什么好处吗?@Tejas有-您可以使用完全限定名来调用它,您将获得intellisense。而且工作起来会稍微快一点。当宏名在编译时未知时,可以使用
.Run
,如果在编译时确实知道,只需直接调用它即可。
Sub AppRun_AddIn_WithArg()
    Application.Run "MyProject.Module1.SayHi2", "Tejas"
End Sub