2017-10-11 104 views
1

我一直在試圖將一張簡單的表從一張表複製到另一張表的最後一行。 最初我嘗試使用數組,因爲兩個表都有不同的結構(列不在同一順序,所以我不能只複製粘貼&),但我總是得到錯誤1004. 現在我放棄了,並改變了所以他們兩個表都有相同的結構,現在我可以簡單地複製&粘貼,但我仍然得到相同的錯誤。 這是我到目前爲止。我知道這是一件很簡單的事情,但我不知道我錯在哪裏。如何將數組粘貼到範圍[VBA] - 錯誤1004

Sub testy() 
Dim rowsIn, rowsOut As Long 

With Worksheets("Sheet1") 
    rowsIn = .Cells.SpecialCells(xlLastCell).Row 
    .Range(.Cells(4, 1), .Cells(rowsIn, 3)).Copy 
End With 
With Worksheets("Sheet2") 
    rowsOut = .Cells.SpecialCells(xlLastCell).Row 
    .Range(.Cells(rowsOut + 1, 3)).PasteSpecial xlPasteValues 
End With 
End Sub 

編輯:解決按添Williams的建議。但是,我仍然很好奇,如何以數組方式完成這項工作,就像我最初的意圖一樣。 假設Sheet1中的數據具有與Sheet2不同的順序的列,我嘗試使用臨時數組來訂購列,以便我可以將其粘貼。我設法填充數組很好,但無法弄清楚如何將數組的內容導入到Sheet2中。添加了我用來填充數組的代碼(以非常不利的方式)。

Sub testy2ElectricBoogaloo() 
Dim arr() As Variant 
Dim rowsIn, rowsOut, i As Long 
    With Worksheets("Sheet1") 
     rowsIn = .Cells.SpecialCells(xlLastCell).Row 
     ReDim arr(1 To rowsIn - 3, 1 To 5) 
'Array populated with a loop because columns are not in the same order, don't know if this is the most efficient method 
     For i = 1 To UBound(arr) 
      arr(i, 1) = "Constant1" 'data collected from other source 
      arr(i, 2) = "Constant2" 'data collected from other source 
      arr(i, 3) = .Cells(i + 3, 2).Value 
      arr(i, 4) = .Cells(i + 3, 1).Value 
      arr(i, 5) = .Cells(i + 3, 3).Value 
     Next i 
    End With 

End Sub 

回答

3

這是無效的:

.Range(.Cells(rowsOut + 1, 3)).PasteSpecial xlPasteValues 

你可以使用:

.Cells(rowsOut + 1, 3).PasteSpecial xlPasteValues 

你可以做到這一點,而不使用複製/粘貼,但:

Sub testy() 

    Dim rowsIn, rowsOut As Long, rng As Range 

    With Worksheets("Sheet1") 
     rowsIn = .Cells.SpecialCells(xlLastCell).Row 
     Set rng = .Range(.Cells(4, 1), .Cells(rowsIn, 3)) 
    End With 

    With Worksheets("Sheet2") 
     rowsOut = .Cells.SpecialCells(xlLastCell).Row 
     .Cells(rowsOut + 1, 3)).Resize(rng.Rows.Count, _ 
             rng.Columns.Count).Value = rng.Value 
    End With 

End Sub 

編輯:使用你的arr的例子相反很相似:

With Worksheets("Sheet2") 
     rowsOut = .Cells.SpecialCells(xlLastCell).Row 
     .Cells(rowsOut + 1, 3)).Resize(UBound(arr, 1), _ 
             UBound(arr, 2)).Value = arr 
    End With 
+0

謝謝,這絕對是我需要的。感謝您的快速回復 - 我現在將繼續卸載Office,因爲它不知道如此基本的內容。 –

+0

不是真的那麼基本;-) –

+0

對不起,讓詢問在一個封閉的Q,但我會怎麼做,如果我想檢索一個數組,而不是一個範圍內的數據(如我本來想這樣做,但放棄了)? –