In effetti, vista l' esigenza di emanuelei forse e' meglio usare questa versione; trattasi della stessa macro di prima ma parametrizzata, che quindi va "richiamata" con i parametri di Path e NomeFile:
- Codice: Seleziona tutto
Sub macroPrintPDF1(ByVal Perc As String, ByVal Nome As String)
'QUESTA E' DA RICHIAMARE COME UNA FUNZIONE DA ALTRA MACRO
' Es Call macroPrintPDF1 ("C:\Documenti\","pippo.pdf")
' modificate le righe ***
'
'le righe <<< e >>> sono alternative; quelle >>> richiedono
' di impostare il riferimento alla libreria PDFCreator (menu /Riferimenti /...)
'Dim objPDFCreator As PDFCreator.clsPDFCreator '>> Early Bind
Dim objPDFCreator '<<< Late Bind
If Len(Replace(Nome, ".pdf", "")) = Len(Nome) Then Nome = Nome & ".pdf"
On Error Resume Next
' If Dir(Perc & Nome) = Perc & Nome Then Kill (Perc & Nome)
If Dir(Perc & Nome) = Nome Then Kill (Perc & Nome)
Shell "taskkill /f /im PDFCreator.exe", vbHide
Application.Wait (Now + TimeValue("0:00:05"))
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") = Perc
.cOption("AutosaveFilename") = Nome
.cOption("AutosaveFormat") = 0
aaa = .cOption("AutosaveFilename")
.cVisible = False
.cClearCache
End With
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
objPDFCreator.cPrinterStop = False
'attesa disponibilita' file finale
Do
DoEvents
Loop Until Dir(Perc & Nome) = Nome
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
End Sub
Ad esempio poi la potrai usare richiamandola con:
- Codice: Seleziona tutto
Sub Stampa1_3_4()
'Stampa i fogli 1, 3 e 4
Sheets("Foglio1").select
Call macroPrintPDF1(ThisWorkbook.Path & "\", "Base_" & Activesheet.name)
Sheets("Foglio3").select
Call macroPrintPDF1(ThisWorkbook.Path & "\", "Base_" & Activesheet.name)
Sheets("Foglio4").select
Call macroPrintPDF1(ThisWorkbook.Path & "\", "Base_" & Activesheet.name)
End Sub
(ci sono sistemi piu' sofisticati per loopare tra i fogli prescelti, ma questo ha certamente il pregio della semplicita')
Ti creera' tre file, nella stessa directory dove e' presente il file in cui avrai inserito il codice, con nome "Base_Foglio1", "Base_Foglio3" e "Base_Foglio4".
Ma come vedi questi parametri li metterai nella stringa di richiamo della macro, compreso eventualmente riprenderli da celle del file excel; es
- Codice: Seleziona tutto
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("H1").Value)
Ciao