VBA代码可将数据从第2行复制到一张纸上的最后一行数据,然后粘贴到另一张纸的第一个空行

时间:2018-10-16 19:15:49

标签: vba excel-vba

我正在工作簿中处理多个工作表。每张纸都有相同的标题行。我想编写一个宏来复制每个工作表中的一系列数据(A2:L2到工作表中的最后一行数据),然后将其粘贴到主工作表A列的第一个空单元格中。

我下面的内容似乎无效。感谢您的协助。

Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count,1).End(xlUp).Row

Sheets("Master Sheet").Range("A2:L10000).Clear

Sheets("Sheet1").Activate
Range("A2:L" & Lastrow).Select
Selection.Copy
Sheets("Master Sheet").Select
Range("A30000").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1,0).Range("A1").Select
ActiveSheet.Paste

Sheets("Sheet2").Activate
Range("A2:L" & Lastrow).Select
Selection.Copy
Sheets("Master Sheet").Select
Range("A30000").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste

1 个答案:

答案 0 :(得分:3)

从外观上您几乎可以看到那里。您似乎已经录制了一个宏,这是一个不错的起点。您的特定代码可能不起作用的原因是由于Sheets("Master Sheet").Range("A2:L10000).Clear。您错过了范围内的结束引号。不过无论如何,我都选择不使用它,以免在跨数据移动时意外清除工作表

因此,通常最好避免使用selectactivate,但是对于录音机,您没有太多发言权。在下面,您可以看到如何直接对范围进行操作。

重要的是,每次都要找到母版纸的最后一行以及您当前的纸,这样您才能知道要复制的范围和粘贴位置。重要的是要记住,您始终会找到最后一个已填充单元格,因此,在粘贴目标位置的情况下,您需要在行值中再添加一个,以免意外覆盖某些数据

对于循环非常有用,我不确定其余工作表的名称,但是幸运的是,在VBA中,您可以使用For each。因此,它的作用是循环遍历您指定的每个项目。在这种情况下,我指定了工作表。但是,现在唯一的问题是我们不想尝试将其复制和粘贴到同一张母版纸上,因此我们需要进行快速检查以确保不在母版纸上。我只需将工作表的名称与您作为主表的名称进行比较就可以做到这一点。

有趣的是,复制内容时,只需指定左上角的单元格,其余单元格就会填满。它使工作变得更加轻松,因为您无需弄清楚要粘贴的数组的确切尺寸。 VBA中的Copy函数具有一个称为Destination的可选参数,您可以使用该参数告诉它要立即粘贴到何处。

在使用范围时也可以完全指定范围,因此可以代替Range来了解我如何使用ThisWorkbook.Worksheets("Master Sheet").Range。这会告诉计算机确切的参考位置。而Range使计算机有点猜测,因此它假设您是指活动工作表,可能不是您想要的。

Sub Paster()
    Dim LastRowCurr As Long
    Dim LastRowMaster As Long
    Dim wksht As Worksheet
    For Each wksht In ThisWorkbook.Worksheets
        If Not wksht.Name = "Master Sheet" Then
            LastRowCurr = wksht.Cells(wksht.Rows.Count, 1).End(xlUp).Row
            LastRowMaster = Worksheets("Master Sheet").Cells(Worksheets("Master Sheet").Rows.Count, 1).End(xlUp).Row + 1
            Range("A2:L" & LastRowCurr).Copy Destination:=ThisWorkbook.Worksheets("Master Sheet").Cells(LastRowMaster, "A")
        End If
    Next wksht
End Sub