繁体   English   中英

使用Excel VBA中的参数调用Word VBA Sub

[英]Calling a Word VBA Sub with arguments from Excel VBA

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

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的正确方法。

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

经过试验和测试

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

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

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

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

关注我的提示

这是一个例子。 我也使用了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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM