2016-05-12 180 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 
相关问题