通过VBA从Excel复制表格后在word中设置表格格式

通过VBA从Excel复制表格后在word中设置表格格式,excel,vba,ms-word,Excel,Vba,Ms Word,我想将Excel中的文本复制到Word文件中,在其中添加一个分页符(第50行和第51行之间),并在Word文件中设置表格的格式将表格的宽度调整到Word文档的页面 我尝试了InsertBreak和SetWidth方法,但不知何故产生了错误(语法或对象未定义) 上面是我目前使用的代码,它可以工作,但在第50行之后没有分页符,表的格式也不正确,即列太宽 有人能帮我/为我指出正确的方向吗?试试下面的代码,并根据您的需要进行定制: Sub Button1() ' Define object

我想将Excel中的文本复制到Word文件中,在其中添加一个分页符(第50行和第51行之间),并在Word文件中设置表格的格式将表格的宽度调整到Word文档的页面

我尝试了InsertBreak和SetWidth方法,但不知何故产生了错误(语法或对象未定义)

上面是我目前使用的代码,它可以工作,但在第50行之后没有分页符,表的格式也不正确,即列太宽


有人能帮我/为我指出正确的方向吗?

试试下面的代码,并根据您的需要进行定制:

Sub Button1()  

    ' Define object variables
    Dim wordObject As Object
    Dim wordDocument As Object
    Dim wordTable As Object
    Dim rangeToCopy As Range

    ' Define other variables
    Dim sheetName As String
    Dim rangeAddress As String
    Dim rowToInsertBreak As Integer

    ' >>>>>Customize
    sheetName = "Sheet1" ' Sheet name in Excel
    rangeAddress = "C15:C73" ' Range in Excel to copy from
    rowToInsertBreak = 25 ' (index starts at 0 and first row is the header

    ' Initiate word object
    Set wordObject = CreateObject("Word.Application")

    ' Add a new document
    Set wordDocument = wordObject.Documents.Add

    ' Make the window visible
    wordObject.Visible = True

    ' Define the range to copy
    Set rangeToCopy = ThisWorkbook.Worksheets(sheetName).Range(rangeAddress)

    ' Copy the range
    rangeToCopy.Copy

    ' Paste it into word
    wordDocument.Paragraphs(1).Range.PasteExcelTable _
        LinkedToExcel:=False, _
        WordFormatting:=False, _
        RTF:=False

    ' Reference the table we just pasted
    Set wordTable = wordDocument.Tables(1)

    ' Autofit the table
    wordTable.AutoFitBehavior 2 ' wdAutoFitWindow: Check https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa211923(v%3Doffice.11)

    ' Insert the page break after row
    wordTable.Rows(rowToInsertBreak).Range.InsertBreak Type:=7 ' wdPageBreak

    ' Clear The Clipboard
    Application.CutCopyMode = False

End Sub
以下是一些您需要查看的链接:

如何将excel表格正确复制并粘贴到word:

注意:通常最好用这个词作为参考

如何处理Word表格中的分页符:

网站规则是每个问题一个问题。你有两个。请使用问题下方的链接将其缩小到单个主题(我建议使用标题中提到的主题)。还包括您尝试过但不起作用的内容、它产生的错误以及导致错误的行。我们还需要确切地知道你想要什么结果。“表的格式也不正确,即列太宽”意味着问题不仅仅是列宽……亲爱的Ricardo,非常感谢!您的答案非常有用,包含了使文件正常工作所需的所有元素。非常感谢!
Sub Button1()  

    ' Define object variables
    Dim wordObject As Object
    Dim wordDocument As Object
    Dim wordTable As Object
    Dim rangeToCopy As Range

    ' Define other variables
    Dim sheetName As String
    Dim rangeAddress As String
    Dim rowToInsertBreak As Integer

    ' >>>>>Customize
    sheetName = "Sheet1" ' Sheet name in Excel
    rangeAddress = "C15:C73" ' Range in Excel to copy from
    rowToInsertBreak = 25 ' (index starts at 0 and first row is the header

    ' Initiate word object
    Set wordObject = CreateObject("Word.Application")

    ' Add a new document
    Set wordDocument = wordObject.Documents.Add

    ' Make the window visible
    wordObject.Visible = True

    ' Define the range to copy
    Set rangeToCopy = ThisWorkbook.Worksheets(sheetName).Range(rangeAddress)

    ' Copy the range
    rangeToCopy.Copy

    ' Paste it into word
    wordDocument.Paragraphs(1).Range.PasteExcelTable _
        LinkedToExcel:=False, _
        WordFormatting:=False, _
        RTF:=False

    ' Reference the table we just pasted
    Set wordTable = wordDocument.Tables(1)

    ' Autofit the table
    wordTable.AutoFitBehavior 2 ' wdAutoFitWindow: Check https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa211923(v%3Doffice.11)

    ' Insert the page break after row
    wordTable.Rows(rowToInsertBreak).Range.InsertBreak Type:=7 ' wdPageBreak

    ' Clear The Clipboard
    Application.CutCopyMode = False

End Sub