Excel VBA скопировать диапазон из Excel и вставить его в текстовое поле заголовка Word - PullRequest
0 голосов
/ 20 ноября 2018

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

  1. Мне нужно скопировать Worksheets("Other Data").Range("A58:A60") и вставить его в «Текстовое поле 1», которое есть в заголовке документов Word.Три часовых на разных рядах.Текстовое поле должно быть завернуто?

  2. Мне нужно скопировать Worksheets("Other Data").Range("A68") и вставить его в «Текстовое поле 2», которое есть в заголовке документов Word.Одна отправка.

  3. AutoFitWindows не работает.Должно быть что-то с переменными, но я не могу понять, что именно не так.Пробовал разные способы безуспешно.

Вот мой код:

Sub excelToWord_click()

    Dim head As Excel.Range
    Dim foot As Excel.Range
    Dim WordTable As Word.Table
    Set wdApp = CreateObject("Word.Application")
    wdApp.Documents.Open FileName:=ThisWorkbook.Path & "\" & "MyDOC" & ".docx"
    wdApp.Visible = True

    Set head = ThisWorkbook.Worksheets("Other Data").Range("A58:A60")

    head.Copy

    '|| I need to paste copied cells to "Text Box 1" in my Word document ||'

    With wdApp.ActiveDocument.Sections(1)
        .Headers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Shapes("Text Box 1").Activate
        head.Paste
    End With

    '|| ---------------------------------------------------------------- ||'

        Set head2 = ThisWorkbook.Worksheets("Other Data").Range("A68")

    head2.Copy

    '|| I need to paste copied cells to "Text Box 2" in my Word document ||'

    With wdApp.ActiveDocument.Sections(1)
        .Headers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Shapes("Text Box 2").Activate
        head2.Paste
    End With

    '|| ---------------------------------------------------------------- ||'

        Set foot = ThisWorkbook.Worksheets("Other Data").Range("A62:H65")
    foot.Copy

    With wdApp.ActiveDocument.Sections(1)
    .Footers(wdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Paste
    End With

    '|| Autofit table to page in Footer ||'

    WordTable.AutoFitBehavior (wdAutoFitWindow)

    '|| ---------------------------------------------------------------- ||'

    'restore Word
    If wdApp.ActiveWindow.View.SplitSpecial <> 0 Then
        wdApp.ActiveWindow.Panes(2).Close
    End If
    If wdApp.ActiveWindow.ActivePane.View.Type = 1 _
    Or wdApp.ActiveWindow.ActivePane.View.Type = 2 Then
        wdApp.ActiveWindow.ActivePane.View.Type = 3
    End If
    wdApp.WordBasic.AcceptAllChangesInDoc
    'wdApp.ActiveDocument.PrintOut, Copies:=1

    wdApp.ActiveDocument.ExportAsFixedFormat outputfilename:=ThisWorkbook.Path & "\" & Sheets("MAIN").Range("D14").Value & ", " & Sheets("MAIN").Range("D11").Value & "_" & "Document" & "_" & ".pdf", exportformat:=wdExportFormatPDF

    wdApp.ActiveDocument.SaveAs ThisWorkbook.Path & "\" & Worksheets("MAIN").Range("D14").Value & ", " & Worksheets("MAIN").Range("D11").Value & "_" & "Document" & "_" & ".docx"

        wdApp.Quit '<--| quit Word
    Set wdApp = Nothing '<--| release object variable
    'wdApp.ActiveWindow.Close savechanges:=False
End Sub

1 Ответ

0 голосов
/ 20 ноября 2018

Ваша проблема в том, что вы поздно связываете свой объект приложения Word, а не устанавливаете ссылку Word на IDE VBA.Это означает, что любые ссылки на константы слова без квалификации на переменную, которую вы используете для вашего приложения word, будут интерпретироваться как значение по умолчанию (0 или ноль).

Самый простой способ решить эту проблему - это VBAIDE;зайдите в Tools.References и убедитесь, что флажок рядом с Microsoft Word ...... отмечен.

Если вы предпочитаете квалифицировать свои переменные, вам нужно изменить константы слова, чтобы они имели префиксс WdApp, вашей переменной для приложения Word.

например, wdApp.wdHeaderFooterIndex.wdHeaderFooterPrimary

С установленной ссылкой Word вы можете просто сказать

wdHeaderFooterPrimary.

...