Print all workbooks in a folder

 2000-02-04    Printing    0    248

With the macros below you can print all workbooks in a selected folder. You have more control with what is printed than you have if you do this from Windows Explorer.

Sub PrintAllWorkbooksInFolder(TargetFolder As String, FileFilter As String)
' prints all workbooks in a folder that matches the FileFilter
' example: PrintAllWorkbooksInFolder "C:\FolderName", "*.xls"
' example: PrintAllWorkbooksInFolder "C:\FolderName", "Bud*.xls"
Dim fn As String, sht As Variant
    Application.ScreenUpdating = False
    If Right(TargetFolder, 1) <> Application.PathSeparator Then
        TargetFolder = TargetFolder & Application.PathSeparator
    End If
    If FileFilter = "" Then FileFilter = "*.xls"
    fn = Dir(TargetFolder & FileFilter) ' the first file name in the folder
    While Len(fn) > 0
        If fn <> ThisWorkbook.Name Then
            Application.StatusBar = "Printing " & fn & "..."
            Workbooks.Open TargetFolder & fn
            ActiveWorkbook.PrintOut ' prints all sheets in the workbook

            ' or print each separate sheet
'            For Each sht In ActiveWorkbook.Sheets
'                sht.PrintOut
'            Next sht

            ' print a specific sheet or chart
'            Worksheets(1).PrintOut ' prints the first worksheet in the workbook
'            Charts(2).PrintOut ' prints the second chart sheet in the workbook

            ' print all sheets of a specific sheet type
'            For Each sht In ActiveWorkbook.Sheets
'                Debug.Print ActiveWorkbook.Name & " " & _
                    sht.Name & " is of type " & TypeName(sht) ' can be removed...
'                If TypeName(sht) = "Worksheet" Then
'                    sht.PrintOut ' print worksheets
'                End If
'                If TypeName(sht) = "Chart" Then
'                    sht.PrintOut ' print charts
'                End If
'            Next sht
            ActiveWorkbook.Close False 
            ' close the workbook without saving any changes
        End If
        fn = Dir ' the next file name in the folder
    Wend
    Application.StatusBar = False
End Sub