《使用VBA合并多个Excel工作簿的几个例子 MY》由会员分享,可在线阅读,更多相关《使用VBA合并多个Excel工作簿的几个例子 MY(6页珍藏版)》请在金锄头文库上搜索。
1、使用 VBA 合并多个 Excel 工作簿的几个例子将许多个工作簿中的工作表合并到一个工作薄中,然后对数据进行统计计算,举了几种合并的案例。Sub 合并工作簿() Application.DisplayAlerts = False 关闭提示窗口 shes = Application.SheetsInNewWorkbook 工作簿中包含工作表数 Application.SheetsInNewWorkbook = 1 生成的新工作簿中只有一个工作表 Set newbok = Workbooks.Add 生成新工作簿 Set newshe = newbok.Worksheets(1) 新工作表 s
2、= 1 从新工作表的第一行写入数据 na = Dir(“d:123*.xls“) 需要合并的所有工作表都要事先保存在 D 盘 time 文件夹下 Do While na “ If MyName vbNullStringDim wbOrig As WorkbookSet wbOrig = Workbooks.Open(Filename:=strFileDir & strFileName, ReadOnly:=True)strFileName = Left(Left(strFileName, Len(strFileName) - 4), 29)For Each ws In wbOrig.Sheet
3、sws.Copy After:=wb.Sheets(wb.Sheets.Count)If wbOrig.Sheets.Count 1 Thenwb.Sheets(wb.Sheets.Count).Name = strFileName & ws.IndexElsewb.Sheets(wb.Sheets.Count).Name = strFileNameEnd IfNextwbOrig.Close SaveChanges:=FalsestrFileName = DirLoopApplication.DisplayAlerts = Falsewb.Sheets(1).DeleteApplicatio
4、n.DisplayAlerts = True Application.ScreenUpdating = TrueSet wb = NothingEnd Sub使用 VBA 合并多个 Excel 工作簿 例如,需要将多个 Excel 工作簿中的工作表合并到一个工作簿。这里假设需要合并的工作簿在“D:示例 数据记录”文件夹中,含有两个工作簿 test1.xls、test2.xls(当然,可以不限于两个) ,在 test1.xls 工作簿 中含有三张工作表,在 test2.xls 工作簿中含有两张工作表,现在使用一段 VBA 代码合并这两个工作簿到 一个新工作簿中,合并到新工作簿中的工作表分别以原工
5、作簿名加索引值命名。代码如下: Sub CombineWorkbooks()Dim strFileName As StringDim wb As WorkbookDim ws As Object包含工作簿的文件夹,可根据实际修改Const strFileDir As String = “D:示例数据记录“Application.ScreenUpdating = FalseSet wb = Workbooks.Add(xlWorksheet)strFileName = Dir(strFileDir & “*.xls*“)Do While strFileName 1 Thenwb.Sheets(w
6、b.Sheets.Count).Name = strFileName & ws.IndexElsewb.Sheets(wb.Sheets.Count).Name = strFileNameEnd IfNextwbOrig.Close SaveChanges:=FalsestrFileName = DirLoopApplication.DisplayAlerts = Falsewb.Sheets(1).DeleteApplication.DisplayAlerts = TrueApplication.ScreenUpdating = TrueSet wb = NothingEnd Sub2.下面
7、是合并多个 Excel 工作簿的另一种情形,也是Excel VBA 实战技巧精粹中所介绍的方法,即合并汇总。 有四个工作簿,分别为:汇总工作簿.xls、一月.xls、二月.xls、三月.xls,其中一月.xls、二月.xls、三月. xls 均只含有一张工作表且工作表中的数据均自单元格 A1 开始,现在要求将它们合并至“汇总工作簿.xls”中。 在“汇总工作簿.xls”中打开 VBE,并输入下列代码: Sub ConsolidateWorkbook()Dim RangeArray() As StringDim bk As WorkbookDim sht As WorksheetDim WbCo
8、unt As IntegerWbCount = Workbooks.CountReDim RangeArray(1 To WbCount - 1)For Each bk In Workbooks 在所有工作簿中循环If Not bk Is ThisWorkbook Then 非代码所在工作簿Set sht = bk.Worksheets(1) 引用工作簿的第一个工作表i = i + 1RangeArray(i) = “ & bk.Name & “ & sht.Name & “!“ & _sht.Range(“A1“).CurrentRegion.Address(ReferenceStyle:=
9、xlR1C1)End IfEnd IfNextWorksheets(1).Range(“A1“).Consolidate _RangeArray, xlSum, True, True End Sub3.下面是汇总多个工作簿的又一种情形,也是一名网友提出的问题:在同一文件夹中有多个工作簿,其中 有一个用于汇总的工作簿,要求将除该汇总工作簿外的其它工作簿中的第一张工作表的数据汇总到该汇 总工作簿中。代码如下: Sub UnionWorksheets()Application.ScreenUpdating = FalseDim lj As StringDim dirname As StringDim
10、 nm As Stringlj = ActiveWorkbook.Pathnm = ActiveWorkbook.Namedirname = Dir(lj & “*.xls*“)Cells.ClearDo While dirname nm ThenWorkbooks.Open Filename:=lj & “ & dirnameWorkbooks(nm).Activate复制新打开工作簿的第一个工作表的已用区域到当前工作表Workbooks(dirname).Sheets(1).UsedRange.Copy _Range(“A65536“).End(xlUp).Offset(1, 0)Workbooks(dirname).Close FalseRange(“A65536“).End(xlUp).Offset(1, 0)Workbooks(dirname).Close FalseEnd Ifdirname = DirLoopEnd Sub