将具有相同名称的不同工作簿中的表单合并到主工作簿中

时间:2016-09-06 17:47:42

标签: excel vba worksheet consolidation

所以我有大约21张纸,这些纸张在大约16个文件中的名称完全相同。所有的格式都是完全相同的,所以例如我需要将所有16个文件中的所有表格与“年龄”组合成一个主文件,该文件将包含所有16个“年龄”的聚合数据的“年龄”表床单。其他20种纸张类似。

我不确定如何做到这一点。我有一个宏,目前将文件中的所有工作表一起添加到一个主工作簿中,我希望修改它,以便它组合相似的工作表而不是将它们全部添加到一个工作簿中。 任何想法将不胜感激!

Sub AddAllWS()
Dim wbDst As Workbook
Dim wbSrc As Workbook
Dim wsSrc As Worksheet
Dim MyPath As String
Dim strFilename As String

Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False

MyPath = "C:\Documents and Settings\path\to"
Set wbDst = ThisWorkbook
strFilename = Dir(MyPath & "\*.xls", vbNormal)

If Len(strFilename) = 0 Then Exit Sub

Do Until strFilename = ""

        Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename)

        Set wsSrc = wbSrc.Worksheets(1)

        wsSrc.UsedRange.Copy

        wsSrc.Paste (wbSrc.Range("A" & Rows.Count).End(xlUp).Offset(1))


        wbSrc.Close False

    strFilename = Dir()

Loop
wbDst.Worksheets(1).Delete

Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

您似乎正在复制并粘贴到相同的源工作表中。检查下面的代码。那可能有用。我在代码中加入了评论。

Sub AddAllWS()
    Dim wbDst As Workbook
    Dim wsDst As Worksheet
    Dim wbSrc As Workbook
    Dim wsSrc As Worksheet
    Dim MyPath As String
    Dim strFilename As String
    Dim lLastRow As Long

    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Set wbDst = ThisWorkbook

    MyPath = "C:\Documents and Settings\path\to\"
    strFilename = Dir(MyPath & "*.xls*", vbNormal)

    Do While strFilename <> ""

            Set wbSrc = Workbooks.Open(MyPath & strFilename)

            'loop through each worksheet in the source file
            For Each wsSrc In wbSrc.Worksheets
                'Find the corresponding worksheet in the destination with the same name as the source
                On Error Resume Next
                Set wsDst = wbDst.Worksheets(wsSrc.Name)
                On Error GoTo 0
                If wsDst.Name = wsSrc.Name Then
                    lLastRow = wsDst.UsedRange.Rows(wsDst.UsedRange.Rows.Count).Row + 1
                    wsSrc.UsedRange.Copy
                    wsDst.Range("A" & lLastRow).PasteSpecial xlPasteValues
                End If
            Next wsSrc

            wbSrc.Close False
            strFilename = Dir()
    Loop

    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub