Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA:Runtime 1004--粘贴到另一工作表的最后一行_Vba_Excel - Fatal编程技术网

VBA:Runtime 1004--粘贴到另一工作表的最后一行

VBA:Runtime 1004--粘贴到另一工作表的最后一行,vba,excel,Vba,Excel,为了构建数据透视表/图表,我试图合并四个单独的选项卡,只从每个选项卡中提取特定的列,这些列位于每个源选项卡的不同位置。这是给另一个用户的,所以手动操作不是一个选项 第一个选项卡工作正常,因为它只是一个直拉。一旦我尝试粘贴到最后一行,事情就变得很奇怪了。我从来没有这样做过这个任务,所以这里可能有一些我遗漏的基本概念导致了这个问题。我正在使用一种我在对如何编写脚本进行初步研究时发现的方法 下面是第一个选项卡中的一个示例: 'Copy and paste data from tab 1 Workshe

为了构建数据透视表/图表,我试图合并四个单独的选项卡,只从每个选项卡中提取特定的列,这些列位于每个源选项卡的不同位置。这是给另一个用户的,所以手动操作不是一个选项

第一个选项卡工作正常,因为它只是一个直拉。一旦我尝试粘贴到最后一行,事情就变得很奇怪了。我从来没有这样做过这个任务,所以这里可能有一些我遗漏的基本概念导致了这个问题。我正在使用一种我在对如何编写脚本进行初步研究时发现的方法

下面是第一个选项卡中的一个示例:

'Copy and paste data from tab 1
Worksheets("redacteda").Range("H:H").Copy _
    Worksheets("Aggregate").Range("G:G")
下面是导致错误的“后续”选项卡中的一个示例:

Dim LastRow As Long

LastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1

'Copy and Past data from tab 2
Worksheets("redactedb").Range("A:A").Copy _
    Worksheets("Aggregate").Range("A" & LastRow)

我也尝试了工作表(“聚合”).Range(“A&LastRow”),但也不起作用

这正是你在上面的评论中所建议的。当然,如果复制的单元格数量超过目标工作表上的剩余单元格数量,则仍然可能会出现错误,因此可能需要对这一不太可能发生的事件进行一些错误捕获

Sub x()

Dim LastRow1 As Long, LastRow2 As Long

With Worksheets("redactedb")
    LastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
    LastRow2 = Worksheets("Aggregate").Cells(Rows.Count, "A").End(xlUp).Row + 1
    .Range("A1", .Range("A" & LastRow1)).Copy Worksheets("Aggregate").Range("A" & LastRow2)
End With

End Sub

像这样的东西应该适合你

Sub Foo()
    Dim wsDest As Worksheet: Set wsDest = ThisWorkbook.Worksheets("Sheet5")
    Dim wsSrc As Worksheet, i As Long, CopyRange As Range, LastRow As Long

    ' Initialize array with sheet names to combine
    Dim SrcArr() As String: SrcArr = Split("Sheet1,Sheet2,Sheet3,Sheet4", ",")

    For i = 0 To UBound(SrcArr)
        On Error Resume Next
            LastRow = wsDest.Range("A:A").Find("*", SearchDirection:=xlPrevious).Row
        On Error GoTo 0
        Set wsSrc = ThisWorkbook.Worksheets(SrcArr(i))
        With wsSrc
            Set CopyRange = Application.Intersect(.UsedRange, .Range("A:A"))
            CopyRange.Copy wsDest.Range("A" & LastRow + 1)
        End With
    Next i
End Sub

您应该向LastRow添加图纸引用。然而,主要的问题是,你试图把一整列复制到一个更小的范围,你不能把一夸脱放进一品脱罐里。我怀疑您是否需要复制整个列。那么我可能需要两个LastRow变量?一个用于源工作表,一个用于目标工作表,并将工作表引用添加到单元格前面(对于每个单元格,列未在行计数中定义,因此我可以使用工作表(“修订的”).range(“A1”:“A”和LastRow)要获得具体的号码?解决方案已验证。这是我的选择,工作起来很有魅力,我一路上学到了一些东西。谢谢SJR。