如何将数组粘贴到[VBA]范围内 - 错误1004

时间:2017-10-11 21:59:33

标签: excel vba excel-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
编辑:根据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

1 个答案:

答案 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