2016-04-29 82 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