【问题标题】:VBA copy and paste macro != manual copy pasteVBA复制和粘贴宏!=手动复制粘贴
【发布时间】:2011-12-11 23:41:17
【问题描述】:

我正在尝试将表格从 excel 复制并粘贴到 word 文档中。

我可以手动完成 - 突出显示单元格,CTRL+C,转到单词,CTRL+V。它工作正常。

但是当我编写一个宏来执行它时,单元格的高度是两倍,就像每个单元格中的行高由于某种原因而改变了一样。为什么不一样?我记录了手动过程,调用的是相同的函数(PasteExcelTable)。

Set wordDoc = wordApp.Documents.Open(wordDocPath)

With wordDoc
    ' cost report
    Dim wordRng As Word.Range
    Dim xlRng As Excel.Range
    Dim sheet As Worksheet
    Dim i As Integer
    Dim r As String

    'Copy the cost report from excel sheet
    Set sheet = ActiveWorkbook.Sheets("COST REPORT")
    i = sheet.Range("A:A").Find("TOTAL PROJECT COST", Range("A1"), xlValues, xlWhole, xlByColumns, xlNext).row
    r = "A11:M" + Trim(Str(i))

    Set xlRng = sheet.Range(r)
    xlRng.Copy

    'Copy and Paste Cost report from Excel
    Set wordRng = .Bookmarks("CostReport").Range 'remember original range

    If .Bookmarks("CostReport").Range.Information(wdWithInTable) Then
        .Bookmarks("CostReport").Range.Tables(1).Delete
    End If

    .Bookmarks("CostReport").Range.PasteExcelTable False, False, False
    .Bookmarks.Add "CostReport", wordRng    'reset range to its original positions
End With

【问题讨论】:

  • 您可以check the documentation 并尝试使用true 作为最后两个参数之一,看看是否可以解决问题。
  • 如果我将最后一个设置为 true (RTF),它看起来会有所不同,但看起来仍然不像 CTRL+V。但是我在将代码粘贴为 HTML 后更新了代码格式,非常接近。

标签: vba excel ms-word


【解决方案1】:

这是我的解决方案:

With wordDoc
    'Paste table from Excel
    Set wordRng = .Bookmarks(bookMarkName).range 'remember original range

    If .Bookmarks(bookMarkName).range.Information(wdWithInTable) Then
        .Bookmarks(bookMarkName).range.Tables(1).Delete
    End If

    .Bookmarks(bookMarkName).range.PasteExcelTable False, False, False
    .Bookmarks.Add bookMarkName, wordRng    'reset range to its original positions

    Dim paraFmt As ParagraphFormat
    Set paraFmt = .Bookmarks(bookMarkName).range.Tables(1).range.ParagraphFormat

    paraFmt.SpaceBefore = 0
    paraFmt.SpaceBeforeAuto = False
    paraFmt.SpaceAfter = 0
    paraFmt.SpaceAfterAuto = False
    paraFmt.LineSpacingRule = wdLineSpaceSingle
    paraFmt.WidowControl = True
    paraFmt.KeepWithNext = False
    paraFmt.KeepTogether = False
    paraFmt.PageBreakBefore = False
    paraFmt.NoLineNumber = False
    paraFmt.Hyphenation = True
    paraFmt.OutlineLevel = wdOutlineLevelBodyText
    paraFmt.CharacterUnitLeftIndent = 0
    paraFmt.CharacterUnitRightIndent = 0
    paraFmt.CharacterUnitFirstLineIndent = 0
    paraFmt.LineUnitBefore = 0
    paraFmt.LineUnitAfter = 0
    paraFmt.MirrorIndents = False
    paraFmt.TextboxTightWrap = wdTightNone
    paraFmt.Alignment = wdAlignParagraphLeft

    .Bookmarks(bookMarkName).range.Tables(1).AutoFitBehavior (wdAutoFitWindow)

End With

【讨论】:

    【解决方案2】:

    请为我试用这段示例代码。我用不同的表格类型从 VBA Excel 测试了它,它给了我令人满意的结果。请根据需要修改它...例如文件名/工作表名称等...

    Sub Sample()
        Dim oWordApp As Object, oWordDoc As Object
        Dim FlName As String
    
        FlName = "C:\MyDoc.doc"
    
        '~~> Establish an Word application object
        On Error Resume Next
        Set oWordApp = GetObject(, "Word.Application")
    
        If Err.Number <> 0 Then
            Set oWordApp = CreateObject("Word.Application")
        End If
        Err.Clear
        On Error GoTo 0
    
        oWordApp.Visible = True
    
        Set oWordDoc = oWordApp.Documents.Open(FlName)
    
        With oWordDoc
            Dim xlRng As Range
    
            Set xlRng = Sheets(1).Range("A1:D10")
            xlRng.Copy
    
            .Bookmarks("CostReport").Range.PasteSpecial Link:=False, _
            Placement:=wdInLine, DisplayAsIcon:=False
        End With
    End Sub
    

    【讨论】:

    • 不,表格仍然以双倍单元格高度粘贴,我只能通过在宏中手动重新格式化来解决这个问题
    • 请试试这个。在 Excel 中自动调整行和列,然后重试:) 您必须先增加列和行,然后再进行自动调整。等待您的来信...
    • 我试过自动调整到窗口,自动调整到内容,那里没有变化。这是因为每个单元格中的段落大小。段落设置“间距”前后设置为6pt,倍数为1.15。它应该是 0/0,单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多