2016-06-10 154 views
0

以下脚本看起来应该可以正常工作,但我在下面标记的行上收到“对象已定义”错误。我找不到是什么原因...将行从一张纸复制到另一张

Sub MailMerge() 
Sheets.Add.Name = "MailMerge" 
Dim MailMerge As Worksheet 
Set MailMerge = Sheets("MailMerge") 
Dim Rng As Range 
Dim i, index, lastrow As Long 
Dim Abstracts As Worksheet 
Set Abstracts = Sheets("Abstracts") 

lastrow = Abstracts.Cells(Rows.Count, 1).End(xlUp).row 


For i = 1 To lastrow 
    Set Rng = Abstracts.Range("O" & i) 
     If WorksheetFunction.CountA(Rng) >= 1 Then 
      Abstracts.Range("A" & i).Resize(0, 14).Copy _ 
      Destination:=MailMerge.Range("A" & i).Resize(0, 14) 
      'this is where the error is occuring 
     End If 
Next 

End Sub 

有什么建议吗?

+0

您是否需要调整粘贴大小? – findwindow

+0

可能不是。但是,删除调整大小并不能解决问题。 – user1996971

回答

1

调整大小不像OFFSET。它会将范围的大小设置为规定的大小。所以你将范围大小设置为0行。它应该是1:

Sub MailMerge() 
Sheets.Add.Name = "MailMerge" 
Dim MailMerge As Worksheet 
Set MailMerge = Sheets("MailMerge") 
Dim Rng As Range 
Dim i, index, lastrow As Long 
Dim Abstracts As Worksheet 
Set Abstracts = Sheets("Abstracts") 

lastrow = Abstracts.Cells(Rows.Count, 1).End(xlUp).Row 


For i = 1 To lastrow 
    Set Rng = Abstracts.Range("O" & i) 
     If WorksheetFunction.CountA(Rng) >= 1 Then 
      Abstracts.Range("A" & i).Resize(1, 14).Copy _ 
      Destination:=MailMerge.Range("A" & i).Resize(1, 14) 
      'this is where the error is occuring 
     End If 
Next 

End Sub 
+0

完美。这解决了这个问题。我没有意识到这种方式调整大小。我总是想知道为什么Resize总是好像在'包含'当前的单元格,而'Offset'则没有。现在我明白了! :) – user1996971

相关问题