2016-05-12 160 views
0

我試圖從不同的工作表複製基於數據填寫彙總表。但是,我收到了一個模糊的錯誤「應用程序或對象定義的錯誤」,我不知道問題是什麼。下面的代碼:Excel VBA-無法從一個工作表複製到另一個

Sub jtest() 
'For j = 3 To Rows.Count (will loop later once I make sure one iteration works) 
    j = 3 




Atext = Cells(j, "A").Text 


    Worksheets(Atext).Range("U6").Copy Destination:=Worksheets("Summary 2").Range(j, "C") 
    Worksheets(Atext).Range("X6").Copy Destination:=Worksheets("Summary 2").Range(j, "D") 
    Worksheets(Atext).Range("Z6").Copy Destination:=Worksheets("Summary 2").Range(j, "F") 
    Worksheets(Atext).Range("V7").Copy Destination:=Worksheets("Summary 2").Range(j, "G") 

' Next j 






End Sub 
+2

你看你是如何通過工作表「工作表(Atext).Range」限定'範圍'?用「細胞」做同樣的事情。 – findwindow

回答

3

首先,我建議增加Option Explicit到最頂端,所以你不得不聲明變量。其次,粘貼時不正確地使用Range()。把它改成Cells(),你很好走!

Sub jtest() 
Dim j&, Atext$, lastRow& 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
lastRow = Worksheets("Sheet1").Cells(Sheet("Sheet1").Rows.Count,1).End(xlUp).Row ' CHANGE THAT WORKSHEET AS NECESSARY. I'm also assuming your Column A has the most data. 
For j = 3 To lastRow  

    Atext = Worksheets("Sheet1").Cells(j, "A").Text ' CHANGE THAT WORKSHEET AS NECESSARY 

    Worksheets("Summary 2").Cells(j, "C").Value = Worksheets(Atext).Range("U6").Value 
    Worksheets("Summary 2").Cells(j, "D").Value = Worksheets(Atext).Range("X6").Value 
    Worksheets("Summary 2").Cells(j, "F").Value = Worksheets(Atext).Range("Z6").Value 
    Worksheets("Summary 2").Cells(j, "G").Value = Worksheets(Atext).Range("V7").Value 

Next j 
Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
End Sub 

我已經編輯了你的想法。假設您的「Sheet1」列A具有最多數據(根據需要進行編輯),我創建了一個lastRow變量,而不是循環200,000次(這會發生在使用Rows.Count時)。我也剛剛設置範圍的值相等,它使用剪貼板跳過,並且速度稍快。請注意,如果您需要格式,這將只保留這些值,然後切換回.Copy Destination:= ...,但將Range(j, "C")更改爲Cells(j, "C")

+1

我知道這不是問題,但你是否意識到OP正在迭代超過100萬次。 –

+0

@ScottCraner - 哎呀,我沒有。我已經添加了第二個代碼(我認爲)應該更快一點,不是嗎? – BruceWayne

+1

是的,但我仍然可以在列A中找到最後一行數據,只是爲了讓它更快。 –

0

而不是以這種方式引用單元格,請創建引用該單元格的範圍對象。利用上述答案的例子中,:

dim row as range, summaryRow as range, sh as worksheet 
set sh = activeworkbook.sheets("Summary 2") 
for each row in sh.usedrange.rows 'I prefer to use "usedrange" 

,你通過行或列循環但是你要做到這一點,設置您正在使用該行範圍內的行,同爲彙總行,然後複製一個到另一個。

row.cells(column).copy summaryRow 
相關問題