2015-06-30 119 views
0

我正在將數據從一個工作簿複製並粘貼到另一個工作簿。不幸的是,我對我的運行時間不滿意。特別是我的代碼的這部分需要很多時間。你有任何想法來減少運行時間嗎?Excel VBA減少運行時間

Function CopyData() 

sws.Activate 
Range("C4:GF4").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 

tws.Activate 
Range("A12").Select 
ActiveSheet.Paste 

Range("D12:GD12").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

End Function 
+0

目前需要多長時間?你有沒有嘗試過嗎?這看起來不會花很長時間。還有其他原因嗎? – L42

+0

您是否在粘貼之前嘗試使用'application.calculation = xlmanual'?之後不要忘記將其切換回自動。其實你是粘貼它作爲價值觀,但我認爲可能有其他公式在工作表中使用這些值。 – Dubison

+0

一般來說,使用'Select'會減慢你的代碼,因爲你正在改變Excel表格。防止這種放慢代碼速度的第一步是在函數的開頭部署Application.ScreenUpdating = False。 – EngJon

回答

1

這應該會提高性能,這是@EngJon提到的關於不使用select的原因。

Function CopyData() 
    Dim rng As Range 

    Application.ScreenUpdating = False 
    sws.Activate 
    Range("C4:GF" & Range("GF" & Rows.Count).End(xlUp).Row).Copy 
    tws.Activate 
    Range("A12").PasteSpecial Paste:=xlPasteAll 
    Set rng = Range("D12:GD" & Range("GD" & Rows.Count).End(xlUp).Row) 
    rng.Value = rng.Value 
    Application.ScreenUpdating = True 
End Function 
+0

完美地工作。非常感謝! – Victor

+1

你能不能擺脫'Activate'呢? 'sws.Range(「C4:GF」&sws.Range(「GF」&Rows.Count).End(xlUp).Row).Copy' and'tws.Range(「A12」)。PasteSpecial Paste:= xlPasteAll '和'Set rng = tws.Range(「D12:GD」&tws.Range(「GD」&Rows.Count).End(xlUp).Row)'? – ChipsLetten

+0

你說得對。謝謝!也適用! – Victor