2016-04-29 80 views
0

我在Excel中下面的一段VBA代码: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:= ___,但这不起作用。 如果我手动复制,文件大小不会增加。如果我手动复制并记录宏并运行此宏,则文件会增加。

任何建议将不胜感激。

回答

2

复印时,您有额外的2行计数。应该是Range("A2:G" & src_rows).Copy

我也建议使用RangeUsed.Rows而不是倒计时(如果第二行是空的,End(xlDown)将进入最大行)。

+0

感谢简单求代码,注意到对别人,而是错过了它在这一个。 现在整合UsedRange,正在寻找比我所做的更好的东西。谢谢 – pokeairguy

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 
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