此示例是将不同路径下的工作簿的第一个工作表合并到同一个工作簿的不同sheet,按照添加顺序把工作表合并进去。 如果要合并多个或者是其他情况可参照更改下即可。
主要分两块内容:
1.第一块,代码块
2.第二块,演示
一、代码块
Sub NewTest()
Dim book1 As String, book2 As String, flag1 As String, flag2 As String
Application.DisplayAlerts = False
Application.ScreenUpdating = False
arr = [a1].CurrentRegion
' flag1 和flag2用于判断对应文件是否存在,存在才进行一步处理,ThisWorkbook.Path返回当前执行VBA
'代码的工作簿的路径,可以直接指定路径,无论是读取还是存储皆可.
For Each i In arr
flag1 = Dir(ThisWorkbook.Path & "\test\testnew2\" & i & "-未超时.xlsx")
flag2 = Dir(ThisWorkbook.Path & "\test\testnew\" & i & "-超时.xlsx")
If flag1 <> "" Then
Workbooks.Open (ThisWorkbook.Path & "\test\testnew2\" & i & "-未超时.xlsx")
book1 = ActiveWorkbook.Name
End If
If flag2 <> "" Then
Workbooks.Open (ThisWorkbook.Path & "\test\testnew\" & i & "-超时.xlsx")
book2 = ActiveWorkbook.Name
End If
If flag1 <> "" Or flag2 <> "" Then
Workbooks.Add
If flag1 <> "" And flag2 = "" Then
Workbooks(book1).Sheets(1).Copy Before:=ActiveWorkbook.ActiveSheet
End If
If flag2 <> "" And flag1 = "" Then
Workbooks(book2).Sheets(1).Copy Before:=ActiveWorkbook.ActiveSheet
End If
If flag1 <> "" And flag2 <> "" Then
Workbooks(book1).Sheets(1).Copy Before:=ActiveWorkbook.ActiveSheet
Workbooks(book2).Sheets(1).Copy After:=ActiveWorkbook.ActiveSheet
End If
With ActiveWorkbook
.SaveAs Filename:=ThisWorkbook.Path & "\test\" & i & ".xlsx"
.Close SaveChanges:=False
End With
End If
If flag1 <> "" Then
Workbooks(book1).Close SaveChanges:=False
End If
If flag2 <> "" Then
Workbooks(book2).Close SaveChanges:=False
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "执行完毕"
End Sub
说明:路径大家可以直接指定绝对路径,因为怕有些人分不清ThisWorkbook.Path代表当前执行VBA脚本的工作簿路径的情形。
合并工作簿的工作表的引用大家可参照实际情况替换索引或者直接使用
表名进行索引。
二、操作演示
- 两个待合并文件夹,文件都放在里面:
- 新合并的路径将在test目录生成
- 此表里面存放的是需要处理的表的名称,代码里通过[a1].CurrentRegion引用,引用后进行迭代
重点还是参照官方教程,特贴链接如下:
ExcelVBA语法
这是VBA基础语法