2015-10-16 241 views
1

我目前有一個VB宏,可以將值從一個表單複製到另一個表單。但是,目前VB的編寫方式是逐行執行,而且運行速度很慢,因爲它經歷了幾千行。我想知道如何才能最好地改變我的VB做一個批量複製粘貼,以減少等待時間。代碼是:將複製粘貼的VBA宏從逐行更改爲批覆制粘貼

Sub copypaste_settlement_rows() 

Dim LastRow As Long 

Application.ScreenUpdating = False 

Sheets("Settlement Template").Select 
'find last row in column A 
LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

For x = 2 To LastRow 
    Cells(x, 1).Resize(1, 42).Copy 
    Sheets("PIVOT DATA").Select 
    NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 
    Cells(NextRow, 1).Select 
    Selection.PasteSpecial Paste:=xlPasteValues 
    Sheets("Settlement Template").Select 
Next x 

Sheets(">> START HERE <<").Select 

Application.CutCopyMode = False 

Application.ScreenUpdating = True 

End Sub 
+0

您是否想要批量選擇表格中的行? –

回答

6

這應該是瞬時的,它不使用剪貼板:

Sub copypaste_settlement_rows() 
    Dim v 
    With Sheets("Settlement Template") 
     v = .Cells(2, 1).Resize(.Cells(.Rows.Count, "A").End(xlUp).Row, 42) 
    End With 
    With Sheets("PIVOT DATA") 
     .Cells(.Rows.Count, "A").End(xlUp).Resize(UBound(v), UBound(v, 2)) = v 
    End With 
End Sub 
+0

@Ian Schneider爲您做了這項工作? –

+0

對於遲到的回覆感到抱歉,我今天才開始測試。儘管它確實能夠立即運行,但我遇到了一些問題 - 即大約40%的時間會導致運行時錯誤7內存不足。它似乎也跳過了它從「結算模板」表中「複製」的最後一行。我會多花一點時間,但是如果我能夠抓住所有東西並且不再發生錯誤,這絕對是我正在尋找的東西! –

1

一個非常簡單的方法(和我在我自己的代碼中看到最快的)是:

ThisWorkbook.Worksheets("PIVOT DATA").Range("A2:A" & lastRow) = ThisWorkbook.Worksheets("Settlement Template").Range("A2:A" & lastRow).Value 
+0

今天我會測試這個,並與上面的答案進行比較,謝謝! –