thairoamer
New Member
- Joined
- Dec 16, 2008
- Messages
- 21
I am trying to tweak the following code kindly made available by Ken Puls (www.excelguru.ca).
The code Prints all sheets in a workbook to PDFCreator, as individual pdf files - great. I need to tweak this so instead of printing all my 40 worksheets it'll print an array of 8 specified worksheets, as individual pdf files. The names of the pdf should be the worksheet name.pdf . Any help on how to do this please?
struggling to tweak to include an array of selective worksheets (snippet code also provided by Ken Puls) ie:
Many thanks in advance for your time,
The code Prints all sheets in a workbook to PDFCreator, as individual pdf files - great. I need to tweak this so instead of printing all my 40 worksheets it'll print an array of 8 specified worksheets, as individual pdf files. The names of the pdf should be the worksheet name.pdf . Any help on how to do this please?
Code:
'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
Dim bRestart As Boolean
'Activate error handling and turn off screen updates
On Error GoTo EarlyExit
Application.ScreenUpdating = False
Set pdfjob = New PDFCreator.clsPDFCreator
sPDFPath = ActiveWorkbook.Path & Application.PathSeparator
'Check if PDFCreator is already running and attempt to kill the process if so
Do
bRestart = False
Set pdfjob = New PDFCreator.clsPDFCreator
If pdfjob.cStart("/NoProcessingAtStartup") = False Then
'PDF Creator is already running. Kill the existing process
Shell "taskkill /f /im PDFCreator.exe", vbHide
DoEvents
Set pdfjob = Nothing
bRestart = True
End If
Loop Until bRestart = False
For lSheet = 1 To ActiveWorkbook.Sheets.Count
'Check if worksheet is empty and skip if so
If Not IsEmpty(Sheets(lSheet).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
'Delete the PDF if it already exists
If Dir(sPDFPath & sPDFName) = sPDFName Then Kill (sPDFPath & sPDFName)
'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 the file shows up before moving on
'Important: Counter must reach zero or hangs on next iteration
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
End If
Next lSheet
Cleanup:
'Release objects and terminate PDFCreator
Set pdfjob = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub
EarlyExit:
'Inform user of error, and go to cleanup section
MsgBox "There was an error encountered. PDFCreator has" & vbCrLf & _
"has been terminated. Please try again.", _
vbCritical + vbOKOnly, "Error"
Resume Cleanup
End Sub
struggling to tweak to include an array of selective worksheets (snippet code also provided by Ken Puls) ie:
Code:
sSheetsToPrint = "Sheet1,Sheet3"
'Split the sheets into an array
sSheets() = Split(sSheetsToPrint, ",")
'Print the document to PDF
For lSheet = LBound(sSheets) To UBound(sSheets)
On Error Resume Next 'To deal with chart sheets
If Not IsEmpty(Application.Sheets(sSheets(lSheet)).UsedRange) Then
Application.Sheets(sSheets(lSheet)).PrintOut copies:=1, ActivePrinter:="PDFCreator"
lTtlSheets = lTtlSheets + 1
End If
On Error GoTo EarlyExit
Next lSheet
Many thanks in advance for your time,