2015-08-31 80 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