Table of Contents
PDFcreator
I notice that you can create COM script with PDFcreator but I found really bad the documentation in the help file.
You have sample in the com directory where the software is installed.
Information come from here
Print a Single Worksheet to a PDF File
Option Explicit Sub PrintToPDF_Early() 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: Print to PDF file using PDFCreator ' (Download from http://sourceforge.net/projects/pdfcreator/) ' Designed for early bind, set reference to PDFCreator Dim pdfjob As PDFCreator.clsPDFCreator Dim sPDFName As String Dim sPDFPath As String '/// Change the output file name here! /// sPDFName = "testPDF.pdf" sPDFPath = ActiveWorkbook.Path & Application.PathSeparator 'Check if worksheet is empty and exit if so If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub Set pdfjob = New PDFCreator.clsPDFCreator With pdfjob If .cStart("/NoProcessingAtStartup") = False Then MsgBox "Can't initialize PDFCreator.", vbCritical + _ vbOKOnly, "PrtPDFCreator" Exit Sub End If .cOption("UseAutosave") = 1 .cOption("UseAutosaveDirectory") = 1 .cOption("AutosaveDirectory") = sPDFPath .cOption("AutosaveFilename") = sPDFName .cOption("AutosaveFormat") = 0 ' 0 = PDF .cClearCache End With 'Print the document to PDF ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator" 'Wait until the print job has entered the print queue Do Until pdfjob.cCountOfPrintjobs = 1 DoEvents Loop pdfjob.cPrinterStop = False 'Wait until PDF creator is finished then release the objects Do Until pdfjob.cCountOfPrintjobs = 0 DoEvents Loop pdfjob.cClose Set pdfjob = Nothing End Sub
Print Multiple Worksheets to Multiple PDF Files
Option Explicit Sub PrintToPDF_MultiSheet_Early() 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: Print to PDF file using PDFCreator ' (Download from http://sourceforge.net/projects/pdfcreator/) ' Designed for early bind, set reference to PDFCreator Dim pdfjob As PDFCreator.clsPDFCreator Dim sPDFName As String Dim sPDFPath As String Dim lSheet As Long Set pdfjob = New PDFCreator.clsPDFCreator sPDFPath = ActiveWorkbook.Path & Application.PathSeparator If pdfjob.cStart("/NoProcessingAtStartup") = False Then MsgBox "Can't initialize PDFCreator.", vbCritical + _ vbOKOnly, "PrtPDFCreator" Exit Sub End If For lSheet = 1 To ActiveWorkbook.Sheets.Count 'Check if worksheet is empty and skip if so If Not IsEmpty(ActiveSheet.UsedRange) Then With pdfjob '/// Change the output file name here! /// sPDFName = "testPDF" & Sheets(lSheet).Name & ".pdf" .cOption("UseAutosave") = 1 .cOption("UseAutosaveDirectory") = 1 .cOption("AutosaveDirectory") = sPDFPath .cOption("AutosaveFilename") = sPDFName .cOption("AutosaveFormat") = 0 ' 0 = PDF .cClearCache End With 'Print the document to PDF Worksheets(lSheet).PrintOut copies:=1, ActivePrinter:="PDFCreator" 'Wait until the print job has entered the print queue Do Until pdfjob.cCountOfPrintjobs = 1 DoEvents Loop pdfjob.cPrinterStop = False 'Wait until PDF creator is finished then release the objects Do Until pdfjob.cCountOfPrintjobs = 0 DoEvents Loop End If Next lSheet pdfjob.cClose Set pdfjob = Nothing End Sub
Print Multiple Worksheets to a Single PDF File
Option Explicit Sub PrintToPDF_MultiSheetToOne_Early() 'Author : Ken Puls (www.excelguru.ca) 'Macro Purpose: Print to PDF file using PDFCreator ' (Download from http://sourceforge.net/projects/pdfcreator/) ' Designed for early bind, set reference to PDFCreator Dim pdfjob As PDFCreator.clsPDFCreator Dim sPDFName As String Dim sPDFPath As String Dim lSheet As Long Dim lTtlSheets As Long '/// Change the output file name here! /// sPDFName = "Consolidated.pdf" sPDFPath = ActiveWorkbook.Path & Application.PathSeparator Set pdfjob = New PDFCreator.clsPDFCreator 'Make sure the PDF printer can start If pdfjob.cStart("/NoProcessingAtStartup") = False Then MsgBox "Can't initialize PDFCreator.", vbCritical + _ vbOKOnly, "Error!" Exit Sub End If 'Set all defaults With pdfjob .cOption("UseAutosave") = 1 .cOption("UseAutosaveDirectory") = 1 .cOption("AutosaveDirectory") = sPDFPath .cOption("AutosaveFilename") = sPDFName .cOption("AutosaveFormat") = 0 ' 0 = PDF .cClearCache End With 'Print the document to PDF lTtlSheets = Application.Sheets.Count For lSheet = 1 To Application.Sheets.Count On Error Resume Next 'To deal with chart sheets If Not IsEmpty(Application.Sheets(lSheet).UsedRange) Then Application.Sheets(lSheet).PrintOut copies:=1, ActivePrinter:="PDFCreator" Else lTtlSheets = lTtlSheets - 1 End If On Error GoTo 0 Next lSheet 'Wait until all print jobs have entered the print queue Do Until pdfjob.cCountOfPrintjobs = lTtlSheets DoEvents Loop 'Combine all PDFs into a single file and stop the printer With pdfjob .cCombineAll .cPrinterStop = False End With 'Wait until PDF creator is finished then release the objects Do Until pdfjob.cCountOfPrintjobs = 0 DoEvents Loop pdfjob.cClose Set pdfjob = Nothing End Sub