【VBA案例012】合并工作簿

301 字
2 分钟
【VBA案例012】合并工作簿

大家好!这次分享的是非常经典的案例:合并工作簿。

相信大家已经很熟悉这个问题了,就是把多个工作簿里的工作表合并到同一个sheet里。

这次同样分享两个方法,以下是VBA代码。详细解析请看文末的视频。

自定义函数:

Private Function filelist(folderspec, Optional pstr = "*.txt")
On Error GoTo errline
Dim fs, f, f1, fc, i, farr
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folderspec)
Set fc = f.Files
ReDim farr(1 To fc.Count)
For Each f1 In fc
If f1.Name Like pstr And Not f1.Name Like "*~$*" Then
i = i + 1
farr(i) = f1.Name
End If
Next
ReDim Preserve farr(1 To i)
filelist = farr
errline:
End Function

方法一:复制粘贴#

Sub 复制粘贴()
Dim i, j, k
Dim fileAr
fileAr = filelist(ThisWorkbook.Path & "\文件夹\", "*.xlsx")
Application.ScreenUpdating = False
For i = 1 To UBound(fileAr)
With Workbooks.Open(ThisWorkbook.Path & "\文件夹\" & fileAr(i))
With .Sheets(1)
.Range("a2:e" & .[a65536].End(3).Row).Copy Sheet1.Range("a" & Sheet1.[a65536].End(3).Row + 1)
End With
.Close False
End With
Next i
Application.ScreenUpdating = True
End Sub

方法二:数组#

Sub 数组()
Dim i, j, k
Dim fileAr
fileAr = filelist(ThisWorkbook.Path & "\文件夹\", "*.xlsx")
Dim tmp
Application.ScreenUpdating = False
For i = 1 To UBound(fileAr)
With Workbooks.Open(ThisWorkbook.Path & "\文件夹\" & fileAr(i))
With .Sheets(1)
tmp = .Range("a2:e" & .[a65536].End(3).Row)
Sheet1.Range("a" & Sheet1.[a65536].End(3).Row + 1).Resize(UBound(tmp), UBound(tmp, 2)) = tmp
End With
.Close False
End With
Next i
Application.ScreenUpdating = True
End Sub

原始链接

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【VBA案例012】合并工作簿
https://fanrich.eu.org/posts/程技/vba/vba案列/vba案例012合并工作簿/
作者
richfan
发布于
2023-10-23
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
richfan
Hello, I'm richfan.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
779
分类
8
标签
138
总字数
3,267,679
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录