I have a macro that I obtained from Microsoft MSDN that I have modified. I wish to create a master list combining the data in several files into one sheet (multiple users update a template) in a MasterData sheet. the MasterData updates all data in a holding
directory to ensure all finished files are accounted for. The folowing code works okay but the cell formating does not come across with the cell values. The users will highlight some cells they think need reviewed. How would I modify this to merge the data
along with the formatting. I've left some comments in to show where I've modified the code.
Any help appreciated.
Sub MergeAllWorkbooks()
Dim MasterData 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
Dim LastRow As Long
ThisWorkbook.Activate
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Application.DisplayAlerts = False
' Create a new workbook and set a variable to the first sheet.
Set MasterData = ThisWorkbook.Worksheets("MasterData") 'Workbooks.Add(xlWBATWorksheet).Worksheets(1)
'Worksheet("MasterData").Select
Sheets("MasterData").Select
Range("A3").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Delete
Range("A3").Select
' Modify this folder path to point to the files you want to use.
FolderPath = Worksheets("Control").Range("B6").Value
Debug.Print (FolderPath)
' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 3
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
Debug.Print (FileName)
' 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.
'MasterData.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.
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("A3:AV" & LastRow)
'Set SourceRange = WorkBk.Worksheets(1).Range("A9:C9")
' Set the destination range to start at column B and
' be the same size as the source range.
Set DestRange = MasterData.Range("A" & 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
' 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
' Call AutoFit on the destination sheet so that all
' data is readable.
'MasterData.Columns.AutoFit
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Application.DisplayAlerts = True
End Sub