【问题标题】:VBA Code to Copy Data from Row 2 to Last Row of Data on One Sheet and Paste to the First Empty Row of Another SheetVBA 代码将数据从第 2 行复制到一个工作表上的最后一行数据并粘贴到另一个工作表的第一个空行
【发布时间】:2019-03-21 09:44:39
【问题描述】:

我正在处理工作簿中的多个工作表。每个工作表都有一个相同的标题行。我想编写一个宏来复制每个工作表中的一系列数据(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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    从外观上看,您就快到了。看起来您已经录制了一个宏,这是一个很好的起点。您的特定代码可能不起作用的原因是Sheets("Master Sheet").Range("A2:L10000).Clear。您缺少范围内的结束引号。不过,无论如何,我选择将其省略,这样您在移动数据时就不会意外清除工作表

    所以一般来说最好避免使用selectactivate,但是使用录音机你在这件事上没有太多发言权。下面你可以看到我如何直接对范围进行操作。

    每次都必须找到主工作表的最后一行以及当前工作表,以便了解要复制的范围以及可以粘贴的位置。请务必记住,您始终会找到最后一个填充单元格,因此在粘贴目标的情况下,您需要在行值中再添加一个,以免意外覆盖某些数据.

    For 循环非常有用,我不确定您的其他工作表有什么名称,但幸运的是在 VBA 中您可以使用 For each。所以它的作用是循环遍历您指定的每个项目。在这种情况下,我指定了工作表。现在唯一的问题是,我们不想尝试复制和粘贴到同一个主表中,所以我们需要快速检查以确保我们不在主表上。我只是通过将工作表的名称与您作为主表的名称进行比较来完成此操作。

    有趣的是,当您复制某些内容时,您只需要指定左上角的单元格,它就会填充其余部分。它使生活变得更轻松,因为您不需要弄清楚要粘贴的数组的确切尺寸。 VBA 中的Copy 函数有一个名为Destination 的可选参数,您可以使用该参数告诉它您想立即将其粘贴到哪里。

    在使用范围时完全指定范围也很好,因此您可以看到我如何使用 ThisWorkbook.Worksheets("Master Sheet").Range 而不是 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
    

    【讨论】:

    • 如果这对您有用,请将答案标记为已接受(在投票按钮下方打勾),以便人们知道该问题已得到充分回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多