Excel 将多个工作簿中的工作表合并到一个工作表中

Excel 将多个工作簿中的工作表合并到一个工作表中,excel,vba,Excel,Vba,我有许多不同表格和相同格式的优秀作品。是否有任何插件可用于将所有工作表合并到目标文件中的“合并”工作表中 但是下面的代码不能合并到一个工作表中 Sub GopFileExcel() Dim FilesToOpen Dim x As Integer On Error GoTo ErrHandler Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="hMicroso

我有许多不同表格和相同格式的优秀作品。是否有任何插件可用于将所有工作表合并到目标文件中的“合并”工作表中

但是下面的代码不能合并到一个工作表中

Sub GopFileExcel()
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="hMicrosoft Excel Files (*.xlsx), *.xlsx", 
MultiSelect:=True, Title:="Files to Merg")
If TypeName(FilesToOpen) = “Boolean” Then
MsgBox "No Files were selected"
GoTo ExitHandler
End If
x = 1
While x <= UBound(FilesToOpen)
Workbooks.Open Filename:=FilesToOpen(x)
Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
子GopFileExcel()
暗文件打开
作为整数的Dim x
关于错误转到错误处理程序
Application.ScreenUpdating=False
FilesToOpen=Application.GetOpenFilename_
(文件过滤器:=“hMicrosoft Excel文件(*.xlsx),*.xlsx”,
MultiSelect:=真,标题:=“文件到Merg”)
如果TypeName(FilesToOpen)=“Boolean”,则
MsgBox“未选择任何文件”
去出口
如果结束
x=1

而要做的第一件事是将所有工作表放在一个工作簿中。这里有一些代码可以帮助您实现这一点

Sub GetSheets()

Path = "C:\Users\USERNAME\Downloads\Test\" 'File path will all your separate files

Filename = Dir(Path & "*.xls")
    Do While Filename <> ""
        Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
        For Each Sheet In ActiveWorkbook.Sheets
            Sheet.Copy After:=ThisWorkbook.Sheets(1)
        Next Sheet
        Workbooks(Filename).Close
        Filename = Dir()
    Loop

End Sub
Sub-GetSheets()
Path=“C:\Users\USERNAME\Downloads\Test\”'文件路径将显示所有单独的文件
Filename=Dir(路径&“*.xls”)
文件名“”时执行此操作
工作簿。打开文件名:=路径和文件名,只读:=真
对于ActiveWorkbook.Sheets中的每个工作表
Sheet.Copy After:=此工作簿.Sheets(1)
下一页
工作簿(文件名)。关闭
Filename=Dir()
环
端接头

然后,您可以编写一个循环来循环所有工作表,并将数据移动到一个工作表中。

首先要做的是将所有工作表移动到一个工作簿中。这里有一些代码可以帮助您实现这一点

Sub GetSheets()

Path = "C:\Users\USERNAME\Downloads\Test\" 'File path will all your separate files

Filename = Dir(Path & "*.xls")
    Do While Filename <> ""
        Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
        For Each Sheet In ActiveWorkbook.Sheets
            Sheet.Copy After:=ThisWorkbook.Sheets(1)
        Next Sheet
        Workbooks(Filename).Close
        Filename = Dir()
    Loop

End Sub
Sub-GetSheets()
Path=“C:\Users\USERNAME\Downloads\Test\”'文件路径将显示所有单独的文件
Filename=Dir(路径&“*.xls”)
文件名“”时执行此操作
工作簿。打开文件名:=路径和文件名,只读:=真
对于ActiveWorkbook.Sheets中的每个工作表
Sheet.Copy After:=此工作簿.Sheets(1)
下一页
工作簿(文件名)。关闭
Filename=Dir()
环
端接头

然后,您可以编写一个循环来循环所有工作表,并将数据移动到一个工作表中。

继@Chrismas007 answer之后,在一个工作簿中包含所有工作表之后,您可以使用下面的代码段将所需范围复制到所需的目标工作表中。这会将复制的节附加到targetsheet中下一个未使用的列

Dim ws As Worksheets
Dim lastcol As Integer

For Each ws In Worksheets
   ThisWorkbook.Worksheets(ws).Column(copyrange).Copy
   lastcol = Worksheets(targetsheet).Cells(1, Columns.Count).End(xlToLeft).Column + 1
   ThisWorkbook.Worksheets(targetsheet).Cells(1, lastcol).PasteSpecial
 Paste:=xlPasteValues, operation:=xlNone
Next

继@Chrismas007 answer之后,在一个工作簿中包含所有工作表之后,可以使用下面的代码段将所需范围复制到所需的目标工作表。这会将复制的节附加到targetsheet中下一个未使用的列

Dim ws As Worksheets
Dim lastcol As Integer

For Each ws In Worksheets
   ThisWorkbook.Worksheets(ws).Column(copyrange).Copy
   lastcol = Worksheets(targetsheet).Cells(1, Columns.Count).End(xlToLeft).Column + 1
   ThisWorkbook.Worksheets(targetsheet).Cells(1, lastcol).PasteSpecial
 Paste:=xlPasteValues, operation:=xlNone
Next