仅将Excel中的值复制粘贴到Word

时间:2016-10-25 17:04:04

标签: vba excel-vba word-vba excel

我一直在使用这个网站一段时间,并且通常研究我的所有问题,但是这个问题让我感到难过了几天。

我有一个Excel工作簿,其中包含允许用户输入特定数据的工作表,一旦使用宏,将创建专门为每个宏设置格式的Word文档。

我正在尝试从excel复制范围,但并非所有行都将完成。范围目前为25行,但大多数用户仅使用8-12:

Set tbl = ThisWorkbook.Worksheets(Sheet4.Name).Range("A8:D33")

我可以复制此范围并将其作为表粘贴到Word中,但我也会获得空行。在Excel中,我只是简单.PasteSpecial Paste:= xlPasteValues但这与Word格式不兼容。

以下是我将该范围复制到我的Word文档中的当前代码:

With Doc.Paragraphs(21).Range
    tbl.Copy
    Doc.Paragraphs(21).Range.PasteExcelTable LinkedToExcel:=False, _
    WordFormatting:=False, _
    RTF:=False
    '.PageSetup.LeftMargin = "40"
    '.PageSetup.RightMargin = "40"

    Set wtbl = Doc.Tables(1)
    wtbl.AutoFitBehavior (wdAutoFitContent)
    wtbl.Borders.Enable = True
        With wtbl.Rows(1)
            .Height = 10
            .Cells.VerticalAlignment = wdAlignVerticalBottom
        End With
    'wtbl.Rows.Cells.VerticalAlignment = wdCellAlignVerticalBottom
    'wtbl.Rows.Height = 15

    'Doc.Paragraphs(23).AutoFitBehavior (wdAutoFitWindow)

End With

2 个答案:

答案 0 :(得分:1)

您可以在这样的列中找到最后使用过的单元格。假设所有列都包含数据并且数据条目来自第8行向下移动,这应该可以解决问题:

With Sheet4
    Dim lastRow As Long
    lastRow = .Range(.Cells(8, 1), .Cells(33, 1)).End(xlDown).Row
    Set tbl = .Range(.Cells(8, 1), .Cells(lastRow, 4))
End With

答案 1 :(得分:0)

我认为CurrentRegion是您的朋友:

Set tbl = Range("A8").CurrentRegion

如果您得到不需要的任何额外列,则始终可以使用Resize属性。