VBA副本列大大增加了文件大小

时间:2016-04-29 13:11:41

标签: excel vba filesize

我在Excel中有以下VBA代码:

Dim src As Worksheet
Dim des As Worksheet
Dim rows As Integer
Dim src_rows As Integer
Set src = Sheets("source sheet")
Set des = Sheets("destination sheet)

'Copy and Paste relevant columns
src.Activate
src_rows = Range("A1", Range("A1").End(xlDown)).Count
Range("A2:G2" & src_rows).Copy
des.Activate
Range("A2").PasteSpecial Paste:=xlPasteValues

我的目标是将源表中的多个列(由SQL数据连接填充)复制到另一个表中。源数据可以更改,因此我使用变量src_rows

计算当前有多少行

重复此代码以复制其他所需的列。这一切都有效,因为我也想要它。但是,运行和保存后,文件大小从大约5MB跳到大约60MB!它不能是额外的数据,因为只有大约10K行。如果我删除复制的数据并重新保存文件不会回退到5MB。

我也尝试使用range(__).copy destination:= ___,但这不起作用。 如果我手动复制,文件大小不会增加。如果我手动复制并记录宏并运行此宏,则文件会增加。

我们非常感谢任何建议。

3 个答案:

答案 0 :(得分:2)

复制时,行数在额外2前面。应该是Range("A2:G" & src_rows).Copy

我还建议使用RangeUsed.Rows而不是倒计时(如果第2行为空,则End(xlDown)将转到最大行)。

答案 1 :(得分:0)

不要将提交数据复制并粘贴到剪贴板,而是尝试使用VBA将一个范围的值设置为另一个范围,例如

Sheets("dest").Range("A1:A100").Value = Sheets("src").Range("A1:A100").Value

更有效率
Sheets("dest").Range("A1:A100").Copy
Sheets("src").Range("A1:A100").PasteSpecial xlPasteValues

答案 2 :(得分:0)

请参阅下面的简单代码

Sub test()
    Dim src As Worksheet
    Dim des As Worksheet
    Dim src_rows As Long
    Set src = Sheets("source sheet")
    Set des = Sheets("destination sheet")
    src.Range("A2:G" & src.Range("A1").End(xlDown).Row).Copy des.Range("A2")
End Sub