@supermatty wrote:
Using Version 1.6.2:
In the Microsoft Office environment, using VBA, I am using the following code to merge multiple PDFs into one large PDF. The code works perfectly, but at the indicated line, adobe reader ("AcroRd32.exe") opens up, and i have to manually close it. I've tried to use other VBA subroutines to close AcroRd32.exe, but the entire code get's stuck on the indicated line UNTIL I close it manually. any help would be greatly appreciated. .Sub bindPDF()
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
Dim DefaultPrinter$
Dim bRestart As Boolean
Dim ws As Worksheet, itemrange As Range, cell As Range, itemcount As Integer
Set ws = ActiveSheet
Set itemrange = ws.Range("e1:e" & Application.CountA(Range("e:e")))
Dim sFilenames() As String
For Each cell In itemrange
itemcount = itemcount + 1
ReDim Preserve sFilenames(itemcount - 1)
sFilenames(itemcount - 1) = cell.Value
Next cell'/// Change the output file name here! ///
sPDFName = "TestEnd.pdf"'' stub here
sPDFPath = "c:\test"'Activate error handling and turn off screen updates
On Error GoTo EarlyExit
' Application.ScreenUpdating = False
Set pdfjob = New PDFCreator.clsPDFCreator'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'Assign settings for PDF job
With pdfjob
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
DefaultPrinter = .cDefaultPrinter
.cDefaultPrinter = "PDFCreator"
.cClearCache
End With'Delete the PDF if it already exists
If Dir(sPDFPath & sPDFName) = sPDFName Then Kill (sPDFPath & sPDFName)'Print the document to PDF
With pdfjob
' change this filename each loopFor i = 0 To UBound(sFilenames)
'***Here is the problem line. I try to kill acrord32.exe Before and After the .cPrintFile line, and it's not working since i need to manually close AcroRd32.exe before the code will continue to the next line
Call KillProcess("AcroRd32.exe")
.cPrintFile (sFilenames(i))
Call KillProcess("AcroRd32.exe")
Next i'Wait until all the print jobs have entered the queue
Do Until pdfjob.cCountOfPrintjobs = UBound(sFilenames) + 1
DoEvents
Loop
.cCombineAll
.cPrinterStop = FalseEnd With
'Wait until the PDF file shows up then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop'Wait a bit longer for PDF Creator to finish
Application.Wait Now + TimeValue("0:0:2")'reset original Windows' default printer
pdfjob.cDefaultPrinter = DefaultPrinter
pdfjob.cCloseCleanup:
'Release objects and terminate PDFCreator
Set pdfjob = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
On Error GoTo 0
'Application.ScreenUpdating = True
Exit SubEarlyExit:
'Inform user of error, and go to cleanup section
MsgBox "There was an error encountered. PDFCreator has" & vbCrLf & _
"has been terminated on file " & sPDFName & " in bind. Please try again.", _
vbCritical + vbOKOnly, "Error"
Resume CleanupEnd Sub
Posts: 1
Participants: 1