Excel-Vba宏以Word复制表格会产生不同的格式结果

时间:2019-07-13 20:22:15

标签: excel vba ms-word

我已经在excel中创建了一个测试宏,该宏可以复制范围并将其粘贴到word中作为表格,同时保留格式。此宏产生的结果与正常复制和粘贴几乎相同,除了单元格中值的位置(它们都太靠近顶部)。还有其他方法可以复制或转移表格吗?链接以获得视觉差异http://prntscr.com/oemp2d

我尝试了简单的.Paste以及.PasteExcelTable(false,false,false),但是两者都会产生相同的问题。我认为这是“ Range.Paste”的问题,但我也不能在excel vba的Word文档中使用.select。

Sub test22()

Set shet = ActiveSheet
Set wdDoc = ActiveDocument

shet.Range("A1:B4").Copy

wdDoc.Paragraphs(1).Range.Paste

End Sub

Table Differences

2 个答案:

答案 0 :(得分:2)

我转载了您的问题。似乎它在表的每一行之后添加了一个空格。因此,在Word中,请依次单击“首页”>“段落”>“行和段落间距”>“在段落后删除空格”似乎可以解决问题。

在Word VBA中,我可以执行以下操作:

ActiveDocument.Tables(activedocument.Tables.Count).Range.Paragraphs.SpaceAfter = False

所以我认为这会起作用:

Sub test22()
Set shet = ActiveSheet
Set wdDoc = ActiveDocument

shet.Range("A1:B4").Copy

wdDoc.Paragraphs(1).Range.Paste
wdDoc.Tables(activedocument.Tables.Count).Range.Paragraphs.SpaceAfter = False
End Sub

请注意,我正在Excel中复制表并使用了PasteExcelTable命令。奇怪的是,在录制宏时,Word不允许我选择整个Word表,所以我只是摸索着获得这一行代码。

答案 1 :(得分:1)

解决这个问题的方法是像Doug所建议的那样删除空格,然后将linepacing设置为1(对于像我这样具有不同的linepacing默认值的人)

Sub test22()

Set shet = ActiveSheet
Set wdDoc = ActiveDocument

shet.Range("A1:B4").Copy

wdDoc.Paragraphs(1).Range.Paste
wdDoc.Tables(1).Range.Paragraphs.SpaceAfter = False
wdDoc.Tables(1).Range.ParagraphFormat.LineSpacing = LinesToPoints(1)
End Sub