【问题标题】:Calling a Word VBA Sub with arguments from Excel VBA使用 Excel VBA 中的参数调用 Word VBA Sub
【发布时间】:2023-03-21 05:45:02
【问题描述】:

我在 dotm 模板中有一个非常简单的 Word sub:

Sub YHelloThar(msg As String)
    MsgBox (msg)
End Sub

然后我有一个 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

最后一行给我“运行时错误'438':对象不支持此属性或方法。”

我不确定我做错了什么 - 我查找的所有内容都表明这是从不同应用程序调用 subs 的正确方法。

此外,如果我将最后一行更改为无参数调用,它会突然正常工作。

【问题讨论】:

    标签: vba parameters excel arguments ms-word


    【解决方案1】:

    久经考验

    Call wdApp.Run("YHelloThar", "Hello")
    

    最后你还有一个额外的End If。我猜是错字?

    提示:为避免运行时错误,您必须在调用前处理错误

    Set wdApp = GetObject(, "Word.Application")
    

    我的提示跟进

    这是一个例子。我还使用了后期绑定,以便它适用于每个 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
    

    【讨论】:

    • 太棒了。这非常有效。特别感谢有关错误检查和后期绑定的额外 cmets。我一直在避免后期绑定,因为我对 VBA 很陌生,并且想看看某些东西有哪些属性/方法(当一切都只是一个对象时,这显然不能很好地工作)但我可能应该尽快进行切换.
    • 附录:这也适用于不在活动文档中的 Sub,但在通过 Word 的启动文件夹自动加载的 .dotm 模板中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多