Excel VBA: копировать значения именованных диапазонов XL в закладки DOC, а затем экспортировать в PDF - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь скопировать значения из именованного диапазона в Excel в закладку в Word. Я нашел этот код в Интернете, который делает это в Excel VBA, но я получаю сообщение об ошибке 13. Установить pappWord = CreateObject ("Word.Application")

Set docWord = pappWord.Documents.Add(Path)

 'Loop through names in the activeworkbook
For Each xlName In wb.Names
     'if xlName's name is existing in document then put the value in place of the bookmark
    If docWord.Bookmarks.Exists(xlName.Name) Then
        docWord.Bookmarks(xlName.Name).Range.Text = Range(xlName.Value)
    End If
Next xlName

 'Activate word and display document
With pappWord
    .Visible = True
    .ActiveWindow.WindowState = 0
    .Activate
End With

Я знаю, что строка, вызывающая ошибку:

docWord.Bookmarks(xlName.Name).Range.Text = Range(xlName.Value)

Что я делаю не так? Кроме того, как и где я могу написать код, чтобы экспортировать документ в PDF?

Заранее спасибо.

Примечание. Я уже выбрал ссылку на объектную модель Microsoft Word (номер версии 14) в Excel

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

, поэтому я использую его для выполнения этой задачи, но беру изображение из отформатированной таблицы Excel.

Sub FromExcelToWord()
Dim rg As Range

For Each xlName In wb.Names
    If docWord.Bookmarks.Exists(xlName.Name) Then

        Set rg = Range(xlName.Value)

        rg.Copy

        docWord.ActiveWindow.Selection.Goto what:=-1, Name:=xlName.Name

        docWord.ActiveWindow.Selection.PasteSpecial link:=False, DataType:=wdPasteEnhancedMetafile, Placement:= _
                                0, DisplayAsIcon:=False

    End If
Next xlName

End Sub
0 голосов
/ 11 февраля 2012

Просто любопытно ... Почему вы добавляете документ, а не открываете соответствующий документ с закладками? Попробуйте этот код ( Я обычно проверяю код перед публикацией, но я не тестировал этот конкретный код. Просто быстро написал его )

Также я использую Позднее связывание, поэтому ссылка на библиотеку объектов Word не требуется.

Sub Sample()
    Dim wb As Workbook
    Dim pappWord As Object, docWord As Object
    Dim FlName As String
    Dim xlName As Name

    FlName = "C:\MyDoc.Doc" '<~~ Name of the file which has bookmarks

    '~~> Establish an Word application object
    On Error Resume Next
    Set pappWord = GetObject(, "Word.Application")

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

    Set docWord = pappWord.Documents.Open(FlName)

    Set wb = ActiveWorkbook

    For Each xlName In wb.Names
         'if xlName's name is existing in document then put the value in place of the bookmark
        If docWord.Bookmarks.Exists(xlName.Name) Then
            docWord.Bookmarks(xlName.Name).Range.Text = Range(xlName).Value
        End If
    Next xlName

     'Activate word and display document
    With pappWord
        .Visible = True
        .ActiveWindow.WindowState = 0
        .Activate
    End With
End Sub

EDIT

Изменено

Range(xlName.Value) 

до

Range(xlName).Value

Теперь вышеприведенный код ПРОБОВАН И ИСПЫТАНО :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...