2013-07-12 53 views
0

我有一個宏將代碼從一個工作簿複製到另一個工作簿。我的代碼是很長,我想縮短它如果可能的話(也可從宏記錄多一點獨立)優化VBA代碼並擺脫Workbook.activate和range.select?

我的代碼如下所示:

Workbooks("export.XLSX").Activate 
Range("A2:A" & Range("A" & Rows.Count).End(xlUp).row).Copy 
Workbooks("ORDERS.CSV").Activate 
Range("X3").Select 
Selection.End(xlDown).Offset(1, -18).Select 
ActiveSheet.Paste 
Workbooks("export.XLSX").Activate 

此塊重複本身不同的列。有沒有辦法縮短這個?

更多的例子:

Range("C2:C" & Range("A" & Rows.Count).End(xlUp).row).Copy 
Workbooks("ORDERS.CSV").Activate 
Range("X3").Select Selection.End(xlDown).Offset(1, -14).Select 
ActiveSheet.Paste 
Workbooks("export.XLSX").Activate 
Range("G2:G" & Range("A" & Rows.Count).End(xlUp).row).Copy 
Workbooks("ORDERS.CSV").Activate 
Range("X3").Select Selection.End(xlDown).Offset(1, -13).Select 
ActiveSheet.Paste 
Workbooks("export.XLSX").Activate 
+1

我們需要看到你的代碼的更多例子之前,我們可以建議改進。 – Dai

+0

查看[本問答](http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select)作爲開始... –

+0

更多上面添加的例子 – heikomania

回答

0

所有的Firt添加Application.ScreenUpdating = False

Workbooks("export.XLSX").Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Copy 
Workbooks("ORDERS.CSV").Range("X3").End(xlDown).Offset(1, -18).Select.PasteSpecial _ 
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

,並遵循相同的模式,然後 Application.Screenupdating = True