1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > vba批量合并指定的sheet_利用VBA实现多个Excel工作簿快速合并方法

vba批量合并指定的sheet_利用VBA实现多个Excel工作簿快速合并方法

时间:2021-09-06 08:48:04

相关推荐

vba批量合并指定的sheet_利用VBA实现多个Excel工作簿快速合并方法

双击打开汇总文件.xls(当然我们也可以随便新建一个excel文档),按ALT+F11打开VBE编辑器,新建一个模块,粘贴如下代码:

Option Explicit

Sub mergeonexls() '合并多工作簿中指定工作表

On Error Resume Next

Dim x As Variant, x1 As Variant, w As Workbook, wsh As Worksheet

Dim t As Workbook, ts As Worksheet, l As Integer, h As Long

Application.ScreenUpdating = False

Application.DisplayAlerts = False

x = Application.GetOpenFilename(FileFilter:="Excel文件 (*.xls; *.xlsx),*.xls; *.xlsx,所有文件(*.*),*.*", _

Title:="Excel选择", MultiSelect:=True)

Set t = ThisWorkbook

Set ts = t.Sheets(1) '指定合并到的工作表,这里是第一张工作表

l = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Column

For Each x1 In x

If x1 <> False Then

Set w = Workbooks.Open(x1)

Set wsh = w.Sheets(1) '指定所需合并工作表,这里是第一张工作表

h = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Row

If l = 1 And h = 1 And ts.Cells(1, 1) = "" Then

wsh.UsedRange.Copy ts.Cells(1, 1)

Else

wsh.UsedRange.Copy ts.Cells(h + 1, 1)

End If

w.Close

End If

Next

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

Sub mergeeveryonexls() '将多个工作簿下的工作表依次对应合并到本工作簿下的工作表,即第一张工作表对应合并到第一张,第二张对应合并到第二张……

On Error Resume Next

Dim x As Variant, x1 As Variant, w As Workbook, wsh As Worksheet

Dim t As Workbook, ts As Worksheet, i As Integer, l As Integer, h As Long

Application.ScreenUpdating = False

Application.DisplayAlerts = False

x = Application.GetOpenFilename(FileFilter:="Excel文件 (*.xls; *.xlsx),*.xls; *.xlsx,所有文件(*.*),*.*", _

Title:="Excel选择", MultiSelect:=True)

Set t = ThisWorkbook

For Each x1 In x

If x1 <> False Then

Set w = Workbooks.Open(x1)

For i = 1 To w.Sheets.Count

If i > t.Sheets.Count Then t.Sheets.Add After:=t.Sheets(t.Sheets.Count)

Set ts = t.Sheets(i)

Set wsh = w.Sheets(i)

l = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Column

h = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Row

If l = 1 And h = 1 And ts.Cells(1, 1) = "" Then

wsh.UsedRange.Copy ts.Cells(1, 1)

Else

wsh.UsedRange.Copy ts.Cells(h + 1, 1)

End If

Next

w.Close

End If

Next

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。