第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/9/26 7:50:39 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

废话不多说直接上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文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8cy2b5qxnr62h60030pd_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top