2015-08-31 48 views
0

我希望有人能帮助我。VBA Excel Macro .copy destination Error 1004

我什么都试过,但我不能确定下面的代码:如果我离开目标线,并使用下面的代码,而不是

Sheets(Sheets.Count).Range("A2:J2" & Range("A2:J2").End(xlDown).Row).Copy _ 
    Destination:=Sheets(Sheets.Count - 3).Range("A2") 

,它的工作原理。

Sheets(Sheets.Count).Range("A2:J2" & Range("A2:J2").End(xlDown).Row).Copy '_ 
    'Destination:=Sheets(Sheets.Count - 3).Range("A2") 

Sheets("All Docs " & Date).Select '(All Docs " & Date) = (Sheets.count-3) 
Range("A2").Select 
ActiveSheet.Paste 

有什么建议吗?多谢。

+0

当您尝试使用第一个代码时会发生什么?有没有给出错误,还是只是不复制?另外,请确保您的'.End(xlDown).Row'不是拍摄到Excel中的最后一行,最有可能导致问题。 – BruceWayne

+1

你有3张以上的床单吗? – BrakNicku

+1

我不遵循你的范围定义。 “A2:J2”&Range(“A2:J2”)。End(xlDown).Row这将导致像“A2:J2 ##”这样的范围。您可能需要取出J2中的2。 – MatthewD

回答

0

我想我明白发生了什么。您试图从A2:J2开始获取“块”数据,然后再下降到某一行,比如说A10:J10--最后要复制的范围为A2:J10

我认为可能发生的情况是您的第2行没有数据(或可能不够),所以Excel将.End(xlDown.Row设置为。

尝试使用这样的:

Sub test() 
Dim lastRow As Long 
With Sheets(Sheets.Count) 
    lastRow = .Range(.Cells(2, 1), .Cells(2, 10)).End(xlDown).Row 

    If lastRow >= 1048576 Then 
     lastRow = 2 
    Else 
     lastRow = .Range(.Cells(2, 1), .Cells(2, 10)).End(xlDown).Row 
    End If 

    .Range(.Cells(2, 1), .Cells(lastRow, 10)).Copy Destination:=Sheets(Sheets.Count - 3).Range("A2") 

End With 

End Sub 

注意有关使用Sheets(Sheets.Count)。这是而不是与使用说的相同,Sheets("LastSheet")。如果您更改工作表的顺序,这将影响您的数据粘贴到的位置。 I.E.如果你最右边的工作表有你的数据(我认为它是这样的,因为你用它来获取粘贴的信息),并且你把它移动到除了文件末尾以外的任何地方,那么你的数据将不能正确地找到。 Sheets.Count指最后一个(最右边)表单。并且Sheets.Count - 3是指从结尾开始的三张纸张(再次,移动表示表格也会导致不粘贴到您想要的位置)。

+0

thx答案,实际上有足够的行。大约130 ...有时更多,有时更少。从我的角度来看,失败必须位于Destination:=行,因为如果没有它,它就可以正常工作。 – bird1989

+0

也thx为提示,与表(sheet.count)的东西。但它是正确的。我的最后3张是数据表。然后在最后3张床单之前每个月增加4张床单。 – bird1989

+0

我建议在VBA中按'F8'一次一步地遍历宏。然后您应该能够关注如何设置范围(您可以将鼠标悬停在变量名称上,并且它们的值将会出现)。这将帮助您了解错误发生的位置。看看你使用'Destination'时是否有帮助。让我们知道你发现了什么! (上面的代码适用于我,所以我很好奇这是否是Sheet布局的问题,而不一定是您尝试使用'Destination')。 – BruceWayne