EXCEL2007 VBA和合并多个工作薄到一个工作表

loading 分享 2026-8-22 下载文档

废话不多说直接上VBA的代码,代码亲测可以合成多个工作薄到一个SHEET上,可能根据个人需要修改的地方有以下两处: 1. '文件所在的文件夹路径,可修改为相应的文件夹 MyPath = \

这个根据个人的情况更换一下所需合成工作薄的目录 2.

'在列A中复制该文件的名称 'With sourceRange

'BaseWks.Cells(rnum, \A\ 'Resize(.Rows.Count).Value = MyFiles(FNum)

'End With

'设置目标区域(destrange)

Set destrange = BaseWks.Range(\A\

上面的四行代码是被注释掉的,这四行代码如果打开在A列就会打印出这一行表格是来自哪个文件,如果需要打开这个功能的话,还需要将BaseWks.Range(\A\中的“A”修改成“B”

Sub UnionWorksheets()

Application.ScreenUpdating = False Dim lj As String

Dim dirname As String Dim nm As String

lj = ActiveWorkbook.Path nm = ActiveWorkbook.Name dirname = Dir(lj & \

Cells.Clear

Do While dirname <> \ If dirname <> nm Then

Workbooks.Open Filename:=lj & \

Workbooks(nm).Activate

'复制新打开工作簿的第一个工作表的已用区域到当前工作表 Workbooks(dirname).Sheets(1).UsedRange.Copy _ Range(\

Workbooks(dirname).Close False End If

dirname = Dir Loop

End Sub

Function RDB_Last(choice As Integer, rng As Range)

' 选择 1 代表最后一行. ' 选择 2 代表最后一列.

' 选择 3 代表最后一个单元格. Dim lrw As Long Dim lcol As Integer

Select Case choice

Case 1:

On Error Resume Next

RDB_Last = rng.Find(What:=\

after:=rng.Cells(1), _ Lookat:=xlPart, _

LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).row On Error GoTo 0

Case 2:

On Error Resume Next

RDB_Last = rng.Find(What:=\

after:=rng.Cells(1), _ Lookat:=xlPart, _

LookIn:=xlFormulas, _

SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Column On Error GoTo 0

Case 3:

On Error Resume Next

lrw = rng.Find(What:=\

after:=rng.Cells(1), _ Lookat:=xlPart, _

LookIn:=xlFormulas, _

SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).row On Error GoTo 0

On Error Resume Next

lcol = rng.Find(What:=\

after:=rng.Cells(1), _ Lookat:=xlPart, _

LookIn:=xlFormulas, _

SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Column On Error GoTo 0

On Error Resume Next

RDB_Last = rng.Parent.Cells(lrw, lcol).Address(False, False) If Err.Number > 0 Then

RDB_Last = rng.Cells(1).Address(False, False) Err.Clear End If

On Error GoTo 0

End Select End Function

Sub MergeAllWorkbooks()

Dim MyPath As String, FilesInPath As String Dim MyFiles() As String

Dim SourceRcount As Long, FNum As Long

Dim mybook As Workbook, BaseWks As Worksheet Dim sourceRange As Range, destrange As Range Dim rnum As Long, CalcMode As Long

'文件所在的文件夹路径,可修改为相应的文件夹 MyPath = \

'路径末尾是否有反斜杠,若无则添加 If Right(MyPath, 1) <> \ MyPath = MyPath & \ End If

'如果文件夹中没有Excel文件则退出 FilesInPath = Dir(MyPath & \

If FilesInPath = \

MsgBox \ Exit Sub End If

'使用文件夹中的Excel文件列表填充数组(myFiles) FNum = 0

Do While FilesInPath <> \ FNum = FNum + 1

ReDim Preserve MyFiles(1 To FNum) MyFiles(FNum) = FilesInPath FilesInPath = Dir() Loop

'修改屏幕更新,计算模式和启用事件的状态 With Application

CalcMode = .Calculation

.Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With

'创建带有一个工作表的新工作簿

Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1) rnum = 1

'遍历数组(myFiles)中的所有文件 If FNum > 0 Then

For FNum = LBound(MyFiles) To UBound(MyFiles) Set mybook = Nothing On Error Resume Next

Set mybook = Workbooks.Open(MyPath & MyFiles(FNum)) On Error GoTo 0

If Not mybook Is Nothing Then

On Error Resume Next

With mybook.Worksheets(1)

Set sourceRange = mybook.Worksheets(1).UsedRange End With

If Err.Number > 0 Then Err.Clear


EXCEL2007 VBA和合并多个工作薄到一个工作表.doc 将本文的Word文档下载到电脑
搜索更多关于: EXCEL2007 VBA和合并多个工作薄到一个工作表 的文档
相关推荐
相关阅读