我正在尝试从不同的工作表中复制以根据数据填写摘要表。但是,我得到了一个模糊的错误“应用程序或对象定义的错误”,我不知道是什么问题。代码如下:
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
答案 0 :(得分: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
我已经编辑了你的想法。我没有循环超过200,000次(如果你使用Rows.Count
会发生这种情况),我创建了一个lastRow
变量,假设你的" Sheet1"列A具有最多数据(根据需要进行编辑)。我还设置了范围'值相等,使用剪贴板跳过,速度稍快一些。请注意,如果您需要格式,这只会保留值,然后切换回.Copy Destination:= ...
,但将Range(j, "C")
更改为Cells(j, "C")
。
答案 1 :(得分: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