簡體   English   中英

需要幫助糾正VBA /宏代碼以將多個選項卡合並為一個

[英]Need help correcting a VBA/Macro code to combine multiple tabs into one

我是VBA的新手,主要在創建宏時使用了它。 從下面的代碼中可以看到,我試圖從三個不同的選項卡中獲取表並將它們合並為一個。 但是,我很難理解如何確保每個表都將直接粘貼在上一個表的下面,並且不會覆蓋它(特別是當每個月創建新行時)。

預先感謝您提供的任何幫助。

' Step_4_Combination_Tab Macro

    Sheets("Past Data").Select
    Range("A2:M2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Combination").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
    Selection.End(xlDown).Select
    Range("A5483").Select
    Sheets("Actual").Select
    Range("A5:M5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Combination").Select
    Range("A5483").Select
    ActiveSheet.Paste
    Range("A5483").Select
    Selection.End(xlDown).Select
    Range("A8341").Select
    Sheets("Forecast").Select
    Range("A4:M4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Combination").Select
    ActiveSheet.Paste
    Selection.End(xlUp).Select
End Sub

以下代碼可能會執行您想要的操作:

Sub mergeSheets()
    Set targetSheet = Sheets("Combination")
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Combination" Then
            Last = LastRow(Sheets("Combination"))
            Sheets(i).UsedRange.Copy targetSheet.Cells(Last + 1, 1)
        End If
    Next i
End Sub

Function LastRow(sh As Worksheet)
LastRow = sh.Cells.Find(What:="*", _
                        After:=sh.Range("A1"), _
                        Lookat:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row
End Function

從此處獲取的一些代碼位https://www.exceltip.com/cells-ranges-rows-and-columns-in-vba/copy-the-usedrange-of-each-sheet-into-one-sheet-using-vba -in-microsoft-excel.html

您將需要找到包含數據的最后一行,並將下一張表粘貼到該行。

    LR = Sheets("Combination").Range("A" & Rows.Count).End(xlUp).Row
    Pasterange = "A" & LR
    Sheets("Combination").Range(Pasterange).Paste

我猜想您要將數據從“過去數據”,“實際”和“預測”選項卡復制到“合並”。 我對嗎? 由於某些奇怪的原因,源工作表中的數據從不同的行開始。 我會這樣:

Sub AllToCons()
CopyToCons "Past data", 2
CopyToCons "Actual", 5
CopyToCons "Forecast", 4
End Sub

Sub CopyToCons(wsName As String, lRow As Long)
'wsName: name of sheet we are copying from
'lRow: number of row where data start

Dim ws As Worksheet
Dim wsCons As Worksheet
Dim rng As Range

Set wsCons = ThisWorkbook.Worksheets("Consolidated")
Set ws = ThisWorkbook.Worksheets(wsName)

With ws
Set rng = Range(.Range("A" & lRow), .Range("M" & .Cells.Rows.Count).End(xlUp))
End With

rng.Copy

With wsCons
.Range("A" & .Cells.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll 
End With

如果只想粘貼值,請鍵入xlPasteValues而不是xlPasteAll。 希望能有所幫助。

暫無
暫無

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

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