分享

Excel多个工作簿中的工作表合并到一个工作簿中

 dfzhuce 2012-08-15
Excel多个工作簿中的工作表合并到一个工作簿中 转
LHY:方法2比较好,是我需要的Excel多个工作簿中的工作表合并到一个工作簿中!^_^

'有时,需要将多个Excel工作簿中的工作表合并到一个工作簿中。有多种合并工作簿的情形,下面先给出一种合并多个工作簿的VBA范例,供参考。

方法1
Sub CombineWorkbooks()
Dim wk As Workbook
Dim sh As Worksheet
Dim strFileName As String
Dim strFileDir As String
Dim nm As String
nm = ThisWorkbook.Name
strFileDir = ThisWorkbook.path & "\"
Application.ScreenUpdating = False
strFileName = Dir(strFileDir & "*.xls")
Do While strFileName <> vbNullString
If strFileName <> nm Then
MsgBox strFileName
Set wk = Workbooks.Open(Filename:=strFileDir & strFileName, ReadOnly:=True)
strFileName = Left(Left(strFileName, Len(strFileName) - 4), 29) '取主文件名,除掉.XLS
For Each sh In wk.Sheets
sh.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
'工作表命名,以工作表所在文件名为类
If wk.Sheets.Count > 1 Then
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = strFileName & sh.Name
Else
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = strFileName
End If
Next
wk.Close SaveChanges:=False
End If
strFileName = Dir
Loop
Application.ScreenUpdating = True
End Sub

方法2
Sub UnWorksheets()
Application.ScreenUpdating = False
Dim lj As String
Dim dirname As String
Dim nm As String
Dim sname As String
Dim i As Integer, ii As Integer
lj = ActiveWorkbook.path
nm = ActiveWorkbook.Name
dirname = Dir(lj & "\*.xls") '查找文件
Do While dirname <> ""
If dirname <> nm Then
Workbooks.Open Filename:=lj & "\" & dirname '打开文件
ii = ActiveWorkbook.Sheets.Count '统计工作表个数
'复制新打开工作簿的每一个工作表到当前工作表(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))最后一个后面
For i = 1 To ii
Workbooks(dirname).Sheets(i).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Next
Workbooks(dirname).Close False
End If
dirname = Dir
Loop
End Sub

'在同一文件夹下有多个工作簿,其中有一个用于汇总的工作簿,要求将除该汇总工作簿外的其它
'工作簿中的每一张工作表的数据汇总到该汇总工作簿中?

Sub UnionWorksheets()
Application.ScreenUpdating = False
Dim lj As String
Dim dirname As String
Dim nm As String
Dim i As Integer, ii As Integer
lj = ActiveWorkbook.path
nm = ActiveWorkbook.Name
dirname = Dir(lj & "\*.xls")
Cells.Clear

Do While dirname <> ""
If dirname <> nm Then
Workbooks.Open Filename:=lj & "\" & dirname
ii = ActiveWorkbook.Sheets.Count
Workbooks(nm).Activate
'复制新打开工作簿的每一个工作表的已用区域到当前工作表
For i = 1 To ii
Workbooks(dirname).Sheets(i).UsedRange.Copy _
Range("a65536").End(xlUp).Offset(2, 0)
Next
Workbooks(dirname).Close False
End If
dirname = Dir
Loop

End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多