Condividi:        

[EXCEL] stampare un file in PDF con una macro

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 28/10/12 18:00

Seguito da altro messaggio in paginata precedente (viewtopic.php?f=26&t=94183&start=40#p559132)
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
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 29/10/12 10:02

Anthony! grazie mille per il tuo aiuto! Siete davvero gentili!
Come dicevo a Flash sono affascinato dal mondo VBA ma al momento... al quanto ignorante!
Capisco (credo!) il discorso sull'impostazione di path e name ma non capisco cosa voglia dire "richiamare" una macro e di conseguenza nemmeno come impostare la macro e non capisco nemmeno quando nel testo della macro si dice

Codice: Seleziona tutto
'le righe <<< e >>> sono alternative; quelle >>> richiedono
'   di impostare il riferimento alla libreria PDFCreator (menu /Riferimenti /...)


Come sempre grazie per il vostro prezioso aiuto e buona giornata!
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 30/10/12 00:14

Le scritte nel codice della macro sono dettagli per gli esperti, perche' parlano di due modalita' di programmazione e spiegano a chi volesse andare sulla seconda quali sono le istruzioni da manipolare. Volendo ti puoi accontentare di sapere che cosi' come l' ho riportata probabilmente funziona :D
Come "richiamare" quella prima macro l' ho esemplificato nella seconda macro: "Ad esempio poi la potrai usare richiamandola con: . . . [segue codice]"

Come usare quel che ti ho proposto:
-da excel, Alt-F11 e ti si apre l' editor delle macro
-Menu /Inserisci /Modulo
-copi dal forum la prima macro e la incolli nel "modulo" appena creato
-copi la seconda macro (Sub Stampa1_3_4) e incolli acodata alla prima
A questo punto torni su excel; ti assicuri che il tuo file abbia tre fogli nominati Foglio1, Foglio3 e Foglio4; SALVI il file, e infine lanci la macro Sub Stampa1_3_4:
-da excel, premi Alt-F8; ti presenta l' elenco delle macro disponibili
-selezioni Sub Stampa1_3_4 e premi Esegui
La macro andra' in esecuzione, e dovrebbe creare tre file nella directory in cui hai salvato il file, col nome Base_Foglio1.pdf, Base_Foglio3.pdf e Base_Foglio4.pdf

Come prerequisito c' e' che sul pc sia installata la stampane virtuale PDFCreator (se non ce l' hai gia' la puoi scaricare qui: http://sourceforge.net/projects/pdfcreator/)

Se invece hai Office 2007 o 2010 allora tieni presente che puoi esportare da il file in formato pdf usando comandi nativi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 09/11/12 17:06

Grazie Anthony!

Funzione perfettamente! Nei giorni scorsi non ho avuto tempo di dedicarmi a questa cosa ma oggi l'ho testata ed è perfetta!

Approfitto per chiederti un'altra informazione (prometto, l'ultima per un po'):

Il file che contiene i 3 fogli da stampare pesca delle informazioni da un altro xls (file source).
Quest'ultimo è costruito in modo tale da avere una colonna con dei numeri (progressivi ma non sempre consecutivi) ed un'altra serie di informazioni in linea.
Il file che devo stampare contiene nel primo foglio una casella in cui oggi scrivo manualmente il numero corrispondente al progressivo del file "source" e poi. attraverso delle formule di ricerca verticale, recupera le informazioni necessarie nei vari campi.
A questo punto lancio la tua macro di stampa e tutto funziona correttamente.
Idealmente sarebbe molto comodo avere una seconda macro di stampa che anzichè "limitarsi" a stampare i 3 fogli del file importi uno dopo l'altro i numeri progressivi del file source con le relative informazioni e stampasse quindi n volte i 3 fogli (ai quali ho dato nomi diversi pescandoli da una cella e quindi non dovrebbero esserci problemi di sovrascrittura).

Non so se mi sono spiegato e se avrai voglia di aiutarmi con la stessa semplicità con cui mi hai assistito fino ad adesso ma in ogni caso ti ringrazio molto!

Ciao,

Emanuele
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 10/11/12 13:39

In linea di massima ti servira' un ciclo che faccia:
Codice: Seleziona tutto
For Each Cell in Workbooks("QuelloDiPartenza").Sheets("QuelloDiPartenza").Range("QuelloCompilato")
   Workbooks("QuelloDaStampare").Sheets("QuelloColParametro").Range("CellaColParametro):Value=Cell.Value
   Call LaMacroCheStampa3Fogli
Next Cell

Vedi se riesci a personalizzarla coi tuoi valori, se No pubblica il codice e il comportamento e vedremo insiema.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 10/11/12 15:23

Ciao Anthony!
Ci sono quasi... credo! Solo devo capire in quale punto inserire la stringa che mi hai appena suggerito.

La mia (tua!) macro funzionante è la seguente:

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

Sub Stampa1_3_4()
'Stampa i fogli 1, 3 e 4
For Each Cell In Workbooks("prova nuova compta 8").Sheets("reservation").Range("A3:A917")
   Workbooks("fafatture e contratti").Sheets("fa contratto").Range ("A2"): Value = Cell.Value
   Call Stampa1_3_4
Next Cell
Sheets("fa contratto").Select
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("F6").Value)
Sheets("fa fattura locataire").Select
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("D8").Value)
Sheets("fa fattura proprietaire").Select
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("D8").Value)
End Sub



La stringa che mi hai suggerito, parametrizzata con i miei valori, ha quest'aspetto:

Codice: Seleziona tutto
Workbooks("prova nuova 8").Sheets("rese").Range("A3:A917")
Workbooks("fafat").Sheets("facon").Range("A2"):Value=Cell.Value
Call Sub Stampa1_3_4()
Next Cell


Ho provato a creare un nuovo modulo e mettere quest'ultima stringa sia in testa alla prima macro che in testa a quella Sub Stampa1_3_4() ma continuna a bloccarsi...

Grazie ancora!

Emanuele
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 10/11/12 18:53

Quello che hai abbozzato deve essere una terza macro; ho anche aggiunto un pezzo di codice che avevi omesso e corretto qualche interpreazione avventurosa:
Codice: Seleziona tutto
Sub ProvaQ()
For Each Cell in Workbooks("prova nuova 8").Sheets("rese").Range("A3:A917")
Workbooks("fafat").Sheets("facon").Range("A2"):Value=Cell.Value
Call Stampa1_3_4
Stop  '<<< Vedi testo
Next Cell
End Sub

Lancerai Stampa1_3_4 quando vuoi stampare il solo file attivo, oppure ProvaQ quando vuoi stampare N file, ognuno compilato sulla base dell' elenco in A3:A917 di Workbooks("prova nuova 8").Sheets("rese").

Aggiungi questa nuova macro su un nuovo Modulo del file che gia' contiene Sub Stampa1_3_4().

Ho aggiunto uno "Stop" per fermare la macro dopo ogni set di stampa; mi fa un po' paura infatti che tu voglia eseguire la stampa di oltre 2700 file senza un debug decoroso; quando sei convinto del risultato puoi eliminare quella riga.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 10/11/12 19:18

Ho fatto come dici ma mi dà errore dicendo che l'indice non appartiene alla selezione e il debug si blocca evidenziando la prima riga della macro...

Grazie!
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 10/11/12 19:22

Forse perche' il tuo file si chiama "prova nuova 8.xlsx" e non "prova nuova 8"?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 11/11/12 11:47

Ciao Anthony,
ho aggiunto l'estenzione del file ed ora mi dà un nuovo errore...

"Errore di esecuzione 438
Proprietà o metodo non gestito per questo oggetto"

Il codice che uso è il seguente:

Codice: Seleziona tutto
Sub ProvaQ()
For Each Cell In Workbooks("prova nuova 8.xlsm").Sheets("rese").Range("A3:A10")
Workbooks("fafat.xlsm").Sheets("facon").Range ("A2"): Value = Cell.Value
Call Stampa1_3_4
Stop  '<<< Vedi testo
Next Cell
End Sub


Grazie e buona domenica!
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 11/11/12 12:38

Workbooks("fafat.xlsm").Sheets("facon").Range ("A2"): Value = Cell.Value
Non so chi ti ha suggerito questo strafalcione :D ma la sintassi giusta e'
Codice: Seleziona tutto
Workbooks("fafat.xlsm").Sheets("facon").Range ("A2").Value = Cell.Value

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 11/11/12 12:54

Anthony,
non so davvero come ringraziarti!
Sei un grande!
Ancora buona domenica!
Emanuele
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 18/09/14 21:03

Anthony!
é passato un bel po' di tempo ma ritrovo con gli stessi file e le stesse esigenze di quando mi hai aiutato con la macro per la stampa in pdf. Provando a riutilizzarla pare non funzionare più. E' possibile che il problema stia nella versione di pdf creator installata?
Grazie!
Emanuele
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Flash30005 » 19/09/14 02:16

Non dovrebbe influire la versione di PdfCreator purché tu abbia installato questo applicativo.

Altrimenti spiega meglio quale problema incontri, tipo di errore, riga di debug con frasi e immagini.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 19/09/14 07:35

Buongiorno Flash,
grazie per la tua risposta,
Qui di seguito la macro che ho inserito su consiglio di Anthony

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

Sub Stampa1_3_4()
'Stampa i fogli 1, 3 e 4
Sheets("facon").Select
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("I3").Value)
Sheets("fafatl).Select
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("D8").Value)
Sheets("fafatp").Select
Call macroPrintPDF1(ThisWorkbook.Path & "\", Range("D8").Value)
End Sub


Quando provo a lanciare la macro mi dice "Errore di compilazione: progetto o biblioteca introvabile".

e mi viene evidenziata la parte "aaa1" della linea aaa1 = objPDFCreator.cProgramIsRunning

Se posso dare altre informazioni,,, Intanto grazie per l'aiuto!
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 21/09/14 23:10

Uso PDFCreator 1.7.3 (che e' l' ultima versione disponibile non di prova) e la Sub macroPrintPDF1(ByVal Perc As String, ByVal Nome As String) si comporta come atteso (cioe' "stampa" il file), senza problemi.
Peraltro le sitruzioni tipo "aaa1=" e "aaa=" sono solo di debug e possono essere eliminate; ma se c' e' qualcosa che non va l' errore (di che tipo??) comparira' su una riga diversa.
Il mio suggerimento e' che rimuovi e poi reinstalli PDFCreator, prelevando il codice qui:
http://www.pdfforge.org/pdfcreator/download

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 18/10/14 15:49

Ciao Anthony,
solo in questi giorni sono riuscito a testare il tutto seguendo il tuo consiglio.
Ho disinstallato pdf creator ed ho installato la versione 1.7.3 a partire dal link che mi hai indicato.
Il risultato è sempre il medesimo quando lancio la macro: il messaggio "Errore di compilazione: progetto o biblioteca introvabile" e la riga con aaa1... evidenziata.
Grazie ancora per la tua disponibilità!
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 18/10/14 23:40

Prova dopo aver eliminato le righe aaa1 = ...e aaa = ...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] stampare un file in PDF con una macro

Postdi emanuelei » 19/10/14 23:08

Ti ringrazio, effettivamente, eliminate le righe che mi hai suggerito di eliminare la macro funziona!

Il passaggio successivo, come mi avevi suggerito tempo fa, è quello di utilizzare un'altra macro per richiamare quella appena vista e farla girare su più linee. Riprendo la macro tale e come me l'avevi suggerita

Codice: Seleziona tutto
Sub ProvaQ()
For Each cell In Workbooks("prova nuova 8.xlsm").Sheets("rese").Range("A385:A741")
Workbooks("fafat.xlsm").Sheets("facon").Range("A2").Value = cell.Value
Call Stampa1_3_4
Next cell
End Sub


Nel momento in cui lancio la macro "ProvaQ" si evidenzia la parola "cell" e mi compare il messaggio "Errore di compilazione: progetto o biblioteca introvabili".

E' un parta gemellare ma siamo alla fine... spero! Non so davvero come ringraziarti per tutto il tuo aiuto. Inutile dire quante ore di lavoro dovrei fare senza questa macro!

Buona settiamana!
emanuelei
Utente Junior
 
Post: 21
Iscritto il: 27/10/12 15:51

Re: [EXCEL] stampare un file in PDF con una macro

Postdi Anthony47 » 20/10/14 00:18

Ma tu che versione di Excel usi?
Prova aggiungendo la riga Dim:
Codice: Seleziona tutto
Sub ProvaQ()
Dim Cell as Range    '<<Questa
For Each cell In Workbooks("prova nuova 8.xlsm").Sheets("rese").Range("A385:A741")

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] stampare un file in PDF con una macro":


Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti