【发布时间】:2015-04-28 09:44:25
【问题描述】:
我已经下载了a macro,它运行良好,但我想合并所有工作簿工作表。这个宏只得到第一个工作表:
Sub MergeAllWorkbooks()
Dim SummarySheet As Worksheet
Dim FolderPath As String
Dim NRow As Long
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' Create a new workbook and set a variable to the first sheet.
'Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
Set SummarySheet = ThisWorkbook.Sheets.Add
SummarySheet.Name = "ALL"
'Clear all old data
SummarySheet.Cells.Delete
' Modify this folder path to point to the files you want to use.
FolderPath = "C:\excel\"
' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 1
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do While FileName <> ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(FolderPath & FileName)
' Set the cell in column A to be the file name.
SummarySheet.Range("A" & NRow).Value = FileName
' Set the source range to be A9 through C9.
' Modify this range for your workbooks.
' It can span multiple rows.
Dim LastRow As Long
LastRow = WorkBk.Worksheets(1).Cells.Find(What:="*", _
After:=WorkBk.Worksheets(1).Cells.Range("A1"), _
SearchDirection:=xlPrevious, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows).Row
Set SourceRange = WorkBk.Worksheets(1).Range("A1:AA" & LastRow1)
' Set the destination range to start at column B and
' be the same size as the source range.
Set DestRange = SummarySheet.Range("B" & NRow)
Set DestRange = DestRange.Resize(SourceRange.Rows.Count, SourceRange.Columns.Count)
' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value
SourceRange.Copy
DestRange.PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False
' Increase NRow so that we know where to copy data next.
NRow = NRow + DestRange.Rows.Count
' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
' Use Dir to get the next file name.
FileName = Dir()
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
在我的 .xl* 文件中,有可变数量的工作表(有时是一张,有时是六张)。
您能帮我循环打开工作簿中的每张工作表吗?
【问题讨论】: