Vba 仅使用Excel中的值将粘贴范围复制到Word中

Vba 仅使用Excel中的值将粘贴范围复制到Word中,vba,excel,ms-word,Vba,Excel,Ms Word,我使用这个网站已经有一段时间了,通常会研究我所有的问题,但这个问题让我困惑了好几天 我有一个Excel工作簿,其中的工作表允许用户输入特定的数据,一旦使用了宏,就会为每个宏创建一个专门格式化的Word文档 我正在尝试从excel复制一个范围,但并非所有行都将完成。当前范围为25行,但大多数用户将仅使用8-12行: Set tbl = ThisWorkbook.Worksheets(Sheet4.Name).Range("A8:D33") 我可以复制这个范围并将它粘贴到Word中作为一个表,但我

我使用这个网站已经有一段时间了,通常会研究我所有的问题,但这个问题让我困惑了好几天

我有一个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

您可以在这样的列中找到最后使用的单元格。假设所有列中都有数据,并且数据条目是从下移的第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

我认为
CurrentRegion
是你的朋友:

Set tbl = Range("A8").CurrentRegion

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

请忽略已注释掉的少数部分。它们不起作用,用于在我得到表格以填充所需日期后进行格式化。我稍后会处理这些区域。如果“大多数用户只使用8-12”,为什么不直接动态调整Excel范围的大小呢?很抱歉,我不知道动态调整范围是什么意思?我需要允许最多25行,因为有一个一次性的场景需要manyI,计算出需要复制多少行,然后只复制这些行。没有任何说明
。范围(“A8:D33”)
需要硬编码。每次都会有所不同。用户每生成一个字母都使用此表,因此一个可能需要8行,下一个可能需要15行。每次他们生成一个新词doc时都会使用这个宏。如果你不介意的话,我还有最后一个问题要问。当我告诉你所有的底层都是空白的时候,我完全搞砸了。最后一行(33)实际上有3个合并的单元格,其中包含单词“Total”,单元格D33将D列的所有单元格相加。是否有办法调整代码,使其包含第33行?我只需复制除第33行以外的所有内容(
。cells(32,1)
,而不是
。cells(33,1)
),然后手动添加总计行。是的,这是我键入此内容后想到的,但我正在努力让它添加到同一个表中。这不起作用:使用Sheet4 Dim lastRow时,长lastRow=.Range(.Cells(8,1),.Cells(32,1)).End(xlDown)。行集tbl=.Range(.Cells(8,1),.Cells(lastRow,4))&范围(“A33:D33”)EndWith@B.Price-使用
wtbl.Rows.Add
在表格末尾添加一行,然后类似于A33的
wtbl.Cell(wtbl.Rows.Count,1)=Sheet4.Cells(33,1)。Value
等。好的,谢谢。那会让我开始的。我要开始玩了。再次感谢您的帮助!