我在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:= ___
,但这不起作用。
如果我手动复制,文件大小不会增加。如果我手动复制并记录宏并运行此宏,则文件会增加。
我们非常感谢任何建议。
答案 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