Excel中的Excel VBA复制范围并将其粘贴到Word标头文本框

时间:2018-11-20 14:27:13

标签: excel vba ms-word header

我从下面的以下代码中运行Excel工作簿。我在Word文档中已经有徽标和页码,因此不需要从Excel中粘贴整个范围。我有两个文本框,应插入电子表格中的数据。

  1. 我需要复制Worksheets("Other Data").Range("A58:A60")并将其粘贴到Word文档标题中的“文本框1”。在不同行上的三种情感。文本框应该换行吗?

  2. 我需要复制Worksheets("Other Data").Range("A68")并将其粘贴到Word文档标题中的“文本框2”。一种观点。

  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 :(得分:1)

您的问题是因为您迟绑定了Word应用程序对象,而不是将Word引用安装到VBA IDE。  这意味着对单词常量的任何引用,如果不限制您用于Word应用程序的变量,都将被解释为默认值(0或Null)。

解决此问题的最简单方法是在VBA IDE中。转到Tools.References,并确保选中Microsoft Word ......旁边的复选框。

如果您希望对变量进行限定,则需要更改单词常量,以使其以WdApp(Word应用程序的变量)为前缀。

例如wdApp.wdHeaderFooterIndex.wdHeaderFooterPrimary

安装了Word参考后,您只能说

wdHeaderFooterPrimary.