3
votes

I have the following two Sub defined in my Word Addin (.dotm) which I have put in StartUp directory

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

Public Sub SayHi2(ByVal n As String)
    MsgBox "Hi " & n
End Sub

Then from a new document I am able to call 1st Sub without argument as below:

Sub AppRun_AddIn_NoArg()
    Application.Run "MyProject.Module1.SayHi1"
End Sub

But when I try to run the 2nd Sub with argument I get error saying "Object doesn't support this property or method"

Sub AppRun_AddIn_WithArg()
    Application.Run "MyProject.Module1.SayHi2", "Tejas"
End Sub

Error Message: enter image description here

1
For some reason it works if you remove the MyProject bit - but then obvously you might end up calling the wrong macro. Apparently this has something to do with "If you specify the document name, your code can only run macros in documents related to the current context — not just any macro in any document". - GSerg
Is there a reason why you aren't using Call? - Mr. Mascaro
@GSerg Yeah, Without project name & module name it worked. - Tejas
@jbarker2160: no specific reason. Is there any advantage I will get by using Call ? - Tejas
@Tejas There is - you'd be able to call it using the fully qualified name, and you'll get intellisense. And it will be slightly faster to work. You use .Run when the macro name is not known at compile time, if you do know it at compile time, just call it directly. - GSerg

1 Answers

2
votes

This appears to be long-standing problem with Word.

As KB190235 suggests:

Cause:
You have included a template name as part of the Macroname argument string.

Resolution:
Remove the template name from the Macroname argument.

Workaround:
To avoid naming conflicts among referenced projects, give your procedures unique names, so that you can call a procedure without specifying a project or module.