EliseFreedman
Programmer
Hi All
I have produced sets of 3 reports for a number of employees. These reports are stored in a folder for each employee. I now want to go through the folders and merge each set of 3 reports into a single report. To do this I am using the following code. At the moment to produce each set of reports I am selecting the employee from a cell (values using a validation list) then the reports for that employee are being merged. Can anyone tell me how to change the code so that I can get it to automatically cycle through the list of employees (B39..B60) and merge the reports for each employee.
I have produced sets of 3 reports for a number of employees. These reports are stored in a folder for each employee. I now want to go through the folders and merge each set of 3 reports into a single report. To do this I am using the following code. At the moment to produce each set of reports I am selecting the employee from a cell (values using a validation list) then the reports for that employee are being merged. Can anyone tell me how to change the code so that I can get it to automatically cycle through the list of employees (B39..B60) and merge the reports for each employee.
Code:
Sub RDB_Copy_Sheet()
Dim myFiles As Variant
Dim myCountOfFiles As Long
FolderName = Range("G39").Value
myCountOfFiles = Get_File_Names( _
MyPath:="M:\depts\HS&ES\Safety\Responsible doc man Live\Elise\Exceptions\" & FolderName, _
Subfolders:=False, _
ExtStr:="*.xl*", _
myReturnedFiles:=myFiles)
If myCountOfFiles = 0 Then
MsgBox "No files that match the ExtStr in this folder"
Exit Sub
End If
Get_Sheet _
PasteAsValues:=True, _
SourceShName:="", _
SourceShIndex:=1, _
myReturnedFiles:=myFiles
End Sub
Code:
Sub Get_Sheet(PasteAsValues As Boolean, SourceShName As String, _
SourceShIndex As Integer, myReturnedFiles As Variant)
Dim mybook As Workbook, BaseWks As Worksheet
Dim CalcMode As Long
Dim SourceSh As Variant
Dim sh As Worksheet
Dim I As Long
Dim myCountOfFiles As Long
FolderName = Range("G39").Value
'Change ScreenUpdating, Calculation and EnableEvents
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
On Error GoTo ExitTheSub
'Add a new workbook with one sheet
Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
'Check if we use a named sheet or the index
If SourceShName = "" Then
SourceSh = SourceShIndex
Else
SourceSh = SourceShName
End If
'Loop through all files in the array(myFiles)
For I = LBound(myReturnedFiles) To UBound(myReturnedFiles)
Set mybook = Nothing
On Error Resume Next
Set mybook = Workbooks.Open(myReturnedFiles(I))
On Error GoTo 0
If Not mybook Is Nothing Then
'Set sh and check if it is a valid
On Error Resume Next
Set sh = mybook.Sheets(SourceSh)
If Err.Number > 0 Then
Err.Clear
Set sh = Nothing
End If
On Error GoTo 0
If Not sh Is Nothing Then
sh.Copy after:=BaseWks.Parent.Sheets(BaseWks.Parent.Sheets.Count)
On Error Resume Next
ActiveSheet.Name = mybook.Name
On Error GoTo 0
If PasteAsValues = True Then
With ActiveSheet.UsedRange
.Value = .Value
End With
End If
End If
'Close the workbook without saving
mybook.Close savechanges:=False
End If
'Open the next workbook
Next I
' delete the first sheet in the workbook
Application.DisplayAlerts = False
On Error Resume Next
BaseWks.Delete
On Error GoTo 0
Application.DisplayAlerts = True
ActiveWorkbook.SaveAs "M:\depts\HS&ES\Safety\Responsible doc man Live\Elise\Exceptions\ExceptionsReports\" & "ExceptionsFor" & FolderName & ".xls"
ActiveWorkbook.Close
ExitTheSub:
'Restore ScreenUpdating, Calculation and EnableEvents
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub