簡體   English   中英

用於將數據從第 2 行復制到一張工作表上的最后一行數據並粘貼到另一張工作表的第一空行的 VBA 代碼

[英]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 Sheet

我正在處理一個工作簿中的多個工作表。 每個工作表都有一個相同的標題行。 我想編寫一個宏來復制每個工作表中的一系列數據(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

從它的外觀來看,您幾乎就在那里。 看起來您已經錄制了一個宏,這是一個很好的起點。 您的特定代碼可能不起作用的原因是因為Sheets("Master Sheet").Range("A2:L10000).Clear 。你錯過了范圍內的結束引號。無論如何,我選擇了將其排除在外,這樣您在移動數據時就不會意外清除工作表

所以通常避免使用selectactivate是好的,但是對於記錄器,您在這件事上沒有太多發言權。 您可以在下面看到我如何直接對范圍進行操作。

每次找到主表的最后一行以及當前表很重要,這樣您就知道要復制的范圍以及可以粘貼到的位置。 重要的是要記住,您總是會找到最后一個填充的單元格,因此在粘貼目標的情況下,您需要在行值中再添加一個,以免意外覆蓋某些數據。

For 循環非常有用,我不確定您對其余工作表的名稱,但幸運的是在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM