Non funziona perche' hai copiato male e hai fatto "qualche modifica".
Ho visto anche che hai fatto delle prove aumentando a dismisura l' attesa prima di killare l' applicazione (
Application.Wait (Now + TimeValue("0:00:20")), commentata nella versione che hai pubblicato), che mi fa pensare che i tempi di attesa che avevo inserito non erano sufficienti sul tuo pc.
Ho visto anche che hai "cablato" all' interno della Sub macroPrintPDF1Selec il foglio e le pagine che vuoi stampare (
Sheets("prove").PrintOut From:=3, To:=6, etc etc), che pero' e' contrario al concetto di subroutine richiamata con parametri.
Cio' detto, ho pubblicato una nuova versione del file di esempio (reperibie allo stesso link) in cui ho inserito:
-una
Sub macroPrintPDF1FromTo, richiamabile con Percorso e NomeFile su cui salvare, ma anche con i parametri "Stampa da pag" e "Stampa fino a pag"
-una
Sub myWait che realizza delle attese piu' intelligenti che non la Application.Wait (quest'ultima in realta' "succhia" durante l' attesa quasi tutta la cpu disponibile, lasciando poco spazio agli altri processi che dovrebbero completarsi in quei secondi di attesa; la Sub myWait intercala esplicitamente l' attesa con la gestione di eventi di sistema). Nella Sub macroPrintPDF1FromTo ho quindi sostituito tutte le vecchie Application.Wait con richiami alla Sub myWait
-una
Sub PrintNPagine(), che e' un esempio di come si sfrutta la Sub macroPrintPDF1FromTo: selezionare il foglio da stampare, richiamare la nuova Sub macroPrintPDF1FromTo con i suoi parametri compreso "da pag" a "Fino a pag".
Tutto questo corrisponde ai seguenti codici:
- Codice: Seleziona tutto
Sub macroPrintPDF1FromTo(ByVal PercF As String, ByVal NFile As String, Optional ByVal myFrom As Long = 1, Optional ByVal myTo As Long = 999)
'
'QUESTA VERSIONE E' DA RICHIAMARE COME UNA FUNZIONE DA ALTRA MACRO
' Es Call macroPrintPDF1Selec ("C:\Documenti\","pippo.pdf", 1 , 3)
' Nell'esempio da 1 a 3 sono le pagine da stampare
' Se omessi, stampa da 1 a 999, cioe' praticamente tutte
'Dim objPDFCreator As PDFCreator.clsPDFCreator '>> Early Bind
Dim objPDFCreator '<<< Late Bind
On Error Resume Next
If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)
Shell "taskkill /f /im PDFCreator.exe", vbHide
'Application.Wait (Now + TimeValue("0:00:02"))
myWait (2)
On Error GoTo 0
'
'Set objPDFCreator = New PDFCreator.clsPDFCreator '>>>
Set objPDFCreator = CreateObject("PDFCreator.clsPDFCreator") '<<
aaa1 = objPDFCreator.cProgramIsRunning
With objPDFCreator
.cStart "/NoProcessingAtStartup"
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = PercF
.cOption("AutosaveFilename") = NFile
.cOption("AutosaveFormat") = 0
aaa = .cOption("AutosaveFilename")
.cVisible = False
.cClearCache
End With
'
'ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'stampa "Foglio"
'Selection.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'stampa "Foglio"
ActiveSheet.PrintOut From:=myFrom, To:=myTo, Copies:=1, ActivePrinter:="PDFCreator", Collate:=True
objPDFCreator.cPrinterStop = False
'attesa disponibilita' file finale
Do
DoEvents
Loop Until Dir(PercF & NFile) = NFile
'Application.Wait (Now + TimeValue("0:00:05"))
myWait (4)
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
'
End Sub
- Codice: Seleziona tutto
Sub myWait(myStab As Single)
'Attende N secondi:
Dim myStTiM As Single
'
myStTiM = Timer
Do 'wait myStab
DoEvents
If Timer > myStTiM + myStab Or Timer < myStTiM Then Exit Do
DoEvents: Loop
End Sub
Queste prime due vanno lasciate cosi'.
- Codice: Seleziona tutto
Sub PrintNPagine()
'Richiama la macroPrintPDF1FromTo
'
Sheets("Foglio1").Select '<< Il Foglio da stampare
myfile = "pippo1.pdf"
Call macroPrintPDF1FromTo("C:\PROVA\pippo\", myfile, 2, 4) 'Stampa da pag 2 a pag 4
End Sub
Quest'ultimo e' solo un esempio; direi che la tua PrintNPagine, per mimare quanto scritto nel tuo esempio di Macro1, dovrebbe essere
- Codice: Seleziona tutto
Sub PrintNPagine()
'Richiama la macroPrintPDF1FromTo
'
myfile = ActiveSheet.Cells(66, 17).Value + ".pdf" 'Puo' essere utile usare Sheets("NomeFoglio") invece che Activesheet...
Sheets("prove").Select '<< Il Foglio da stampare
Call macroPrintPDF1FromTo("C:\prova\", myfile, 3, 6) 'Stampa da pag 3 a pag 6
End Sub
Quindi (ri)prova e fai sapere...