【问题标题】:Merge multiple excel files, while keeping the Header Row from first File only合并多个 excel 文件,同时仅保留第一个文件的标题行
【发布时间】:2014-02-21 10:39:43
【问题描述】:

我尝试了很多搜索,但找不到满意的答案。抱歉,如果是转发。

我基本上想要的是将多个 excel 文件合并到一个工作簿中。我只想保留第一个 excel 文件的标题行并忽略其余 excel 文件的标题行(因为它们都是相同的)。所以最终结果应该是第一个 excel 文件和剩余 excel 文件中的 Header + 数据,我只需要数据行,而不是具有与第一个文件相似的列标题的第一行。 下面的复制粘贴所有excel文件中的所有行和列。谢谢你帮助我。

For wbCounter = 1 To UBound(books)

                Set wbSource = oExcel.Workbooks.Open(books(wbCounter))
                For wsCounter = 1 To wbSource.Sheets.Count
                    Set wsSource = wbSource.Sheets(wsCounter)

                    If wsSource.Name Like selectSheetStr Then
                        emptySheet = True

                        If cbOptionIgnoreEmpty.Value = True And wsSource.UsedRange.Address = "$A$1" Then
                            emptySheet = True
                        Else
                            emptySheet = False
                        End If

                        If emptySheet = False Then
                            mergedWorksheetName = wsSource.Name

                            sheetExist = SheetExists(mergedWorksheetName, wbResult)
                            If (cbOptionAppendData.Value = True And sheetExist = True) Then
                                Set wsMergeResult = wbResult.Sheets(mergedWorksheetName)
                                wsSource.UsedRange.Copy
                                wsMergeResult.Cells(wsMergeResult.UsedRange.Rows.Count + 1, 1).Resize(wsSource.UsedRange.Rows.Count, wsSource.UsedRange.Columns.Count).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone
                                mergedWorksheetCount = mergedWorksheetCount + 1
                                'Name of Worksheet
                                wsResult.Cells(mergedWorksheetCount + 1, 1) = wsMergeResult.Name
                                'Fullpath of Workbook
                                wsResult.Cells(mergedWorksheetCount + 1, 2) = wbSource.FullName
                            Else
                                wsSource.Copy After:=wbResult.Sheets(wbResult.Sheets.Count)
                                mergedWorksheetCount = mergedWorksheetCount + 1
                                wsResult.Cells(mergedWorksheetCount + 1, 1) = .ActiveSheet.Name
                                wsResult.Cells(mergedWorksheetCount + 1, 2) = wbSource.FullName
                            End If
                        End If
                    End If
                Next wsCounter
                wbSource.Close SaveChanges:=False
            Next wbCounter

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    换行试试...

    wsSource.UsedRange.Copy
    

    ...与:

    wsSource.UsedRange.Resize(wsSource.UsedRange.Rows.Count - 1, wsSource.UsedRange.Columns.Count).Offset(1, 0).Copy
    

    这应该复制使用的范围减去第一行。

    【讨论】:

    • 谢谢索伦。它确实从剩余的 excel 文件中删除了列名。再问一件事希望你不会介意,如果我在剩余的 excel 文件中有 1 行记录,那就是复制粘贴行两次。因此,第二个 excel 表中的记录(只有一行记录)在主 excel 文件(我的意思是最终合并的 excel 工作簿)上被复制了两次。你知道为什么会这样吗?再次感谢您的帮助。
    • 我担心我不完全理解您的第二个问题。也许在一个新问题中描述这一点会更好?如果它对你有用,请接受答案。
    • 谢谢索伦。我将添加一个新问题。
    【解决方案2】:

    此代码将为您获取特定文件夹中所有文件的路径

    Option Explicit
    Sub CountRows()
    
        Dim MyObject As Scripting.FileSystemObject
        Set MyObject = New Scripting.FileSystemObject
        Dim mySource As Folder
        Dim myFile As Scripting.File
    
        Dim strPath As String
    
        Set mySource = MyObject.GetFolder("D:\") ' or any other folder
        For Each myFile In mySource.Files
            strPath = myFile.Path
       Next
    End Sub
    

    此代码将打开这些工作簿并修改其单元格

    dim wrkbook as workbook
    set wrkbook = workbooks.open(strPath) ' the path comes from the code above
    'modify the workbook
    wrkbook.worksheets.item(1).cells(1, 1) = "something"
    

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多