Линейный код Selection.InsertFile FileName: = "C: \ Users \ FileName.Docx" работает с Word VBA, но не с Excel VBA - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь вставить несколько файлов 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

1 Ответ

0 голосов
/ 21 декабря 2018

Разобрался с помощью этого поста Как использовать методы выделения слов в Excel VBA - или, более конкретно, комментарий @TimWilliams внизу второго ответа.

Проблема с Selection заключается в том, что он будет ссылаться на Excel.Я пытался связать его с документом Word, но это свойство приложения:

На панели окна документа может быть только один объект Selection, и только один объект Selection во всем приложении можетбыть активным.

Объект выделения

Я также вытащил 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...