【VBA案例012】合并工作簿

  1. 方法一:复制粘贴
  2. 方法二:数组

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

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

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

自定义函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

方法一:复制粘贴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

方法二:数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

原始链接


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 richffan@outlook.com

文章标题:【VBA案例012】合并工作簿

字数:361

本文作者:Rich Fan

发布时间:2023-10-23, 00:00:00

最后更新:2024-02-27, 08:17:39

原始链接:http://fanrich.github.io/2023/10/22/VBA/VBA%E6%A1%88%E5%88%97/%E3%80%90VBA%E6%A1%88%E4%BE%8B012%E3%80%91%E5%90%88%E5%B9%B6%E5%B7%A5%E4%BD%9C%E7%B0%BF/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。