zoukankan      html  css  js  c++  java
  • VBA宏 合并EXCEL

    1、合并多个Excel工作簿

    Sub MergeWorkbooks()
        Dim FileSet
        Dim i As Integer
       
        On Error GoTo 0
        Application.ScreenUpdating = False
    
        FileSet = Application.GetOpenFilename(FileFilter:="Excel 2003(*.xls),*.xls,Excel 2007(*.xlsx),*.xlsx", _
                                                MultiSelect:=True, Title:="选择要合并的文件")
       
        If TypeName(FileSet) = "Boolean" Then
            GoTo ExitSub
        End If
       
        For Each Filename In FileSet
            Workbooks.Open Filename
            Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        Next
       
    ExitSub:
        Application.ScreenUpdating = True
       
    End Sub

    2、合并一个工作簿下多个一致性SHEET

    Function LastRow(sh As Worksheet)
        On Error Resume Next
        LastRow = sh.Cells.Find(what:="*", _
                                After:=sh.Range("A1"), _
                                Lookat:=xlPart, _
                                LookIn:=xlFormulas, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlPrevious, _
                                MatchCase:=False).Row
        On Error GoTo 0
    End Function
    
    Sub MergeSheets()
        Dim sh As Worksheet
        Dim DestSh As Worksheet
        Dim Last As Long
        Dim shLast As Long
        Dim CopyRng As Range
        Dim StartRow As Long
    
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    
        '新建“汇总”Sheet
        Application.DisplayAlerts = False
        On Error Resume Next
        ActiveWorkbook.Worksheets("汇总").Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
        Set DestSh = ActiveWorkbook.Worksheets.Add
        DestSh.Name = "汇总"
    
        '开始复制的行号,无表头设置为1
        StartRow = 2
    
        For Each sh In ActiveWorkbook.Worksheets
    
            If sh.Name <> DestSh.Name Then
                Last = LastRow(DestSh)
                shLast = LastRow(sh)
    
                If shLast > 0 And shLast >= StartRow Then
    
                    Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))
    
                    If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
                        MsgBox "超过最大容量!"
                        GoTo ExitSub
                    End If
    
                    CopyRng.Copy
                    With DestSh.Cells(Last + 1, "A")
                        .PasteSpecial xlPasteValues
                        .PasteSpecial xlPasteFormats
                        Application.CutCopyMode = False
                    End With
                End If
            End If
        Next
    
    ExitSub:
        Application.GoTo DestSh.Cells(1)
        DestSh.Columns.AutoFit
        Application.ScreenUpdating = True
        Application.EnableEvents = True
       
    End Sub
  • 相关阅读:
    【 星 辰 · 第 二 条 约 定 】
    【 星 辰 · 第 一 条 约 定 】
    【 塔 · 第 三 条 约 定 】
    【 塔 · 第 二 条 约 定 】
    某些奇葩的正则校验
    localstorage本地存储的简单使用
    js基础(3)之闭包。
    js基础(2)filter()筛选过滤
    js基础(1)变量作用域
    scrum过程
  • 原文地址:https://www.cnblogs.com/Fly-sky/p/5181623.html
Copyright © 2011-2022 走看看