Pix*_*ant 3 parameters vba arguments excel-vba word-vba
我在dotm模板中有一个非常简单的Word子句:
Sub YHelloThar(msg As String)
MsgBox (msg)
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我有一个Excel子:
Sub CallWordSub()
Dim wdApp As Word.Application
Dim newDoc As Word.Document
'Word template location
strFile = "C:\Some\Folder\MyWordDoc.dotm"
'Get or create Word application
Set wdApp = GetObject(, "Word.Application")
If wdApp Is Nothing Then
Set wdApp = CreateObject("Word.Application")
End If
'Create new Word doc from template
Set newDoc= wdApp.Documents.Add(strFile)
'Call the YHelloThar sub from the word doc
Call wdApp.Run(strFile & "!YHelloThar", "Hello")
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
最后一行给出了"运行时错误'438':对象不支持此属性或方法."
我不确定我做错了什么 - 我查找的所有内容都表明这是从不同应用程序调用subs的正确方法.
此外,如果我将最后一行更改为无参数调用,它会突然正常工作.
经过试验和测试
Call wdApp.Run("YHelloThar", "Hello")
Run Code Online (Sandbox Code Playgroud)
最后你还有一个额外End If的.我猜错了?
提示:为避免运行时错误,您必须在调用之前处理错误
Set wdApp = GetObject(, "Word.Application")
Run Code Online (Sandbox Code Playgroud)
关注我的提示
这是一个例子.我也使用了Late Binding,因此它适用于每个Office版本.
Sub Sample()
Dim wdApp As Object, newDoc As Object
Dim strFile As String
strFile = "C:\Some\Folder\MyWordDoc.dotm"
'~~> Establish an Word application object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set wdApp = CreateObject("Word.Application")
End If
Err.Clear
On Error GoTo 0
wdApp.Visible = True
Set newDoc = wdApp.Documents.Add(strFile)
Call wdApp.Run("YHelloThar", "Hello")
'
'~~> Rest of the code
'
End Sub
Run Code Online (Sandbox Code Playgroud)