【问题标题】:Selection.InsertFile FileName:="C:\Users\FileName.Docx" line code works with Word VBA but not Excel VBASelection.InsertFile FileName:="C:\Users\FileName.Docx" 行代码适用于 Word VBA 但不适用于 Excel VBA
【发布时间】:2018-12-21 20:02:40
【问题描述】:

我正在尝试使用书签在现有 Word 文件模板中插入多个 Word 文件。
下面在现有 word 文件中搜索特定书签,并将另一个 word 文件的内容插入到现有 word 文件中。
除了Selection.InsertFile FileName:=BookmarkValue 行之外,其余代码工作正常。
这行代码在 Word VBA 中有效,但在 Excel VBA 中无效。

你能帮我弄清楚我哪里错了吗?
为了您的方便,我在下面提供了代码的简化版本。

Sub CreateWordDocuments3()
    Dim LastRow As Long
    Dim DocLoc, BookmarkName, BookmarkValue, FileName As String

    Dim WordDoc, WordApp As Object
    Dim WordContent As Word.Range

    With Sheet3

        'Open Word Template
        On Error Resume Next                     'If Word is already running
        Set WordApp = GetObject("Word.Application")
        If Err.Number <> 0 Then
            'Launch a new instance of Word
            Err.Clear
            'On Error GoTo Error_Handler
            Set WordApp = CreateObject("Word.Application")
            WordApp.Visible = True               'Make the application visible to the user
        End If

        DocLoc = "C:\Users\DKC\Desktop\Basetemplate.docx"

        Set WordDoc = WordApp.Documents.Open(FileName:=DocLoc, ReadOnly:=False) 'Open Template          

        BookmarkName = .Cells(4, 2).Value        'BookmarkName is IndustryAnlysis in the word file (DocLoc)
        BookmarkValue = .Cells(4, 3).Value       'BookmarkValue is link to the word file to be inserted = "C:\Users\DKC\Desktop\Industry Analysis.docx"
        WordDoc.Bookmarks(BookmarkName).Select
        Selection.InsertFile FileName:=BookmarkValue ' Line code working in word VBA but not in excel VBA

        FileName = ThisWorkbook.Path & "\" & "NewDoc" & ".docx"
        WordDoc.SaveAs FileName

        WordApp.Quit
    End With
End Sub

【问题讨论】:

  • 你试过把WordDoc.Bookmarks(BookmarkName).InsertFile FileName:=BookmarkValue这两行合并吗?
  • 另外,您还有一个名为 FileName 的变量,FileName 也是 InsertFile 方法的参数 - 尝试重命名该变量,这样 VBA 就不会混淆您的意思。
  • 感谢达伦的编辑。我需要重新发布问题吗?是的,我也尝试过重命名,但没有成功。
  • 不,不需要转发。恐怕我无法提供太多帮助 - 还没有真正完成任何 Word 编码。
  • 感谢您的宝贵时间。对此,我真的非常感激。 :)

标签: excel vba ms-word


【解决方案1】:

在这篇文章 How to use Words selection methods through Excel VBA 的帮助下弄清楚了 - 或者更特别的是 @TimWilliams 在第二个答案底部的评论。

Selection 的问题在于它将引用 Excel。我试图将它链接到 Word 文档,但它是应用程序的属性:

每个文档窗口窗格只能有一个 Selection 对象,并且 整个应用程序中只能有一个 Selection 对象处于活动状态。

Selection object

我还将 CreateWord 拉到一个单独的函数中。

Public Sub CreateWordDoc()

    Dim oWrd As Object, oWrdDoc As Object
    Dim BkMkName As String, BkMkValue As String

    Const docloc As String = "C:\Users\DKC\Desktop\Basetemplate.docx"

    Set oWrd = CreateWord
    Set oWrdDoc = oWrd.documents.Open(docloc, False)

    With Sheet3
        BkMkName = .Cells(4, 2)
        BkMkValue = .Cells(4, 3)
    End With

    oWrdDoc.Bookmarks(BkMkName).Select
    oWrd.Selection.InsertFile Filename:=BkMkValue

End Sub

Public Function CreateWord(Optional bVisible As Boolean = True) As Object

    Dim oTempWD As Object

    On Error Resume Next
    Set oTempWD = GetObject(, "Word.Application")

    If Err.Number <> 0 Then
        Err.Clear
        On Error GoTo ERROR_HANDLER
        Set oTempWD = CreateObject("Word.Application")
    End If

    oTempWD.Visible = bVisible
    Set CreateWord = oTempWD

    On Error GoTo 0
    Exit Function

ERROR_HANDLER:
        MsgBox "Error " & Err.Number & vbCr & _
                " (" & Err.Description & ") in procedure CreateWord."
            Err.Clear

End Function  

编辑 -
因此,如果您不想使用我发布的代码,您的代码应该通过更改来工作

Selection.InsertFile FileName:=BookmarkValue  

WordApp.Selection.InsertFile FileName:=BookmarkValue

【讨论】:

  • 不错! OP - 注意一些常用词,例如 2 个对象模型之间的选择和范围。
  • 谢谢达伦..你搞定了。这行得通。 :) 感谢 MacroMarc 的关注。
猜你喜欢
  • 2021-10-09
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多