Excel VBA-无法从一个工作表复制到另一个工作表

时间:2016-05-12 17:03:31

标签: excel vba 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 个答案:

答案 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