我一直在尝试将一张简单的表从一张纸复制到第二张纸的最后一行。 最初我尝试使用数组,因为两个工作表都有不同的结构(列不是相同的顺序,所以我不能只复制和粘贴),但我总是得到错误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
编辑:根据Tim 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
答案 0 :(得分: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