Condividi:        

Salvare 1 foglio con nome particolare

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: Salvare 1 foglio con nome particolare

Postdi Alea » 20/01/12 08:42

Giorno a tutti

x Flash
grazie per le info
ho fatto delle prove impostando la cartella di output del file e funziona. Questa opzione però "me la tengo nel cassetto" perché comunque non posso lasciare impostato che tutti i file che faccio in pdf mi vadano in quella cartella.
Resta il fatto che è un ottima soluzione.
Grazie

X Anthony
ho unito i vari codici e mi viene fuori questo:
Codice: Seleziona tutto
Sub FLASH()
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "_Offerta_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Ditta & Offerta & Data & ".xls"
    Sheets("OFFERTA").Select
    Sheets("OFFERTA").Copy
    ChDir PercF
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close

Call macroPrintPDF1(PercF & "\", NFile)    '<<< AGGIUNTA

End Sub


Sub macroPrintPDF1(ByVal PercF As String, ByVal NFile As String)
'Le righe marcate <<< e >>> sono alternative; quelle >>> richiedono
'   di impostare il riferimento alla libreria PDFCreator (menu /Riferimenti /...)
'Come e' ora NON e' necessario avere il "Riferimento" a pdfcreator nel vba
'
'QUESTA E' DA RICHIAMARE COME UNA FUNZIONE DA ALTRA MACRO
' Es Call macroPrintPDF1 ("C:\Documenti\","pippo.pdf")
' modificate le righe ***
'
'Dim objPDFCreator As PDFCreator.clsPDFCreator '>> Early Bind
Dim objPDFCreator  '<<<  Late Bind

On Error Resume Next
    If Dir(PercF & NFile) = PercF & NFile Then Kill (PercF & NFile)
    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") = PercF
.cOption("AutosaveFilename") = NFile
.cOption("AutosaveFormat") = 0
aaa = .cOption("AutosaveFilename")
.cVisible = False
.cClearCache
End With
'
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"   'stampa "Foglio"
objPDFCreator.cPrinterStop = False

'attesa disponibilita' file finale
Do
   DoEvents
Loop Until Dir(PercF & NFile) = NFile
'
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
'
End Sub

Con questo codice mi salva il file con un altro nome e mi chiede comunque il percorso.
Forse sto sbagliando qualcosa.
Vedo di fare ancora un po' di prove e poi decido cosa fare.

Grazie mille intanto a entrambi
Ciao
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Sponsor
 

Re: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 21/01/12 01:02

C' e' un errore nella macro che ti diedi, sia nella versione macroPrintPDF che macroPrintPDF1 (chiamabile):
non If Dir(PercF & NFile) = PercF & NFile Then Kill (PercF & NFile)
MA
Codice: Seleziona tutto
        If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)

Per favore prova ancora e fai sapere.

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

Re: Salvare 1 foglio con nome particolare

Postdi Alea » 23/01/12 08:16

Buon giorno a tutti
ho fatto la modifica che ha suggerito Anthony sul codice postato prima.
Ora la macro che si chiama "FLASH" esegue questi movimenti:
1. estrae il foglio OFFERTA in un nuovo file
2. crea il nome giusto
3. chiude il file OFFERTA appena creato senza salvarlo
4. richiama la macro "macroPrintPDF1"
5. fa partire il PDFCreator
6. crea il pdf con il nome giusto e nella directory giusta

Sembra che questo codice ce lo fa apposta. Prima funziona una cosa poi si mette a posto quella cosa ma toglie qualcosa da un'altra parte. :lol: :lol:

Quello che non fa adesso è praticamente questo:

Codice: Seleziona tutto
 ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile


Ciao intanto
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Flash30005 » 23/01/12 10:31

Non è che la macro "Flash" non salva ma lo salva e poi cancelli il file con la riga di codice
Codice: Seleziona tutto
    If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)

contenuta nella macro "macroPrintPDF1"
pertanto togli quella riga dalla macro "macroPrintPDF1"
e inseriscila nella macro Flash
prima della creazione del file
Codice: Seleziona tutto
    ChDir PercF  '<<<< esistente su macro "Flash"
    If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile) '<<<< inserire qui
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile '<<<<< esistente nella macro "Flash"

Serve solo a verificare se il file è già esistente, in quel caso lo elimina prima di crearlo nuovamente al fine di evitare il messaggio di sovrascrittura
puoi anche eliminare quel codice
bloccando i messaggi di avviso in questa maniera
Codice: Seleziona tutto
   ChDir PercF  '<<< esistente
    Application.DisplayAlerts = False  '<<< aggiungere
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile  '<<< esistente
    Application.DisplayAlerts = True  '<<< aggiungere
    ActiveWindow.Close'<<< esistente


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: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 23/01/12 10:58

Ragazzi, non confondiamo le variabili valide all' interno di macroPrintPDF1 con quelle valide all' interno di altre macro...
L' istruzione If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile) e' fatta per cancellare un file pdf, perche' quando la macroPrintPDF1 e' richiamata gli si passano path e filename da creare; se il file creato da macroPrintPDF1 esiste ed e' un pdf (esiste ed e' un pdf?) allora assumerei che tale macro non cancella un .xls; anche se RILEGGENDO il listato di alea di qualche post fa sembra che lui passi a macroPrintPDF1 lo stesso percorso e nome file usato per il file excel. Se e' cosi', e' questo l' errore da eliminare, non spostare istruzioni dalla macroPrintPDF1 alla chiamante.

Non escludo che ci possano essere errori nella mia macro o nel modo con cui viene invocata, per questo suggerirei, UNA VOLTA verificato che il nome passato a macroPrintPDF1 sia di un pdf e non di un xls, di separare i problemi, collaudando separataente la macro di crea file xls (senza la stampa su pdf), poi la macro di stampa pdf e quando ognuno dei due componenti funziona si inserisce la Call macroPrintPDF1 (parametroPath, parametroNomeFilepdf).

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

Re: Salvare 1 foglio con nome particolare

Postdi Alea » 23/01/12 11:20

In effetti il nome e il percorso dei due file deve essere lo stesso.
E a dirla tutta io preferirei avere 2 macro separate:
Una che salva il file nella cartella con quel nome in formato .xls
la seconda che stampi in PDF in quella cartella con quel nome.

Ho provato la variante di Flash e viene creato il file excel con nome e path giusto ma per il pdf non prende il nome giusto (ma il nome del file CB-TECH) e chiede il percorso.
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Flash30005 » 23/01/12 11:24

@Alea leggi i post precedenti (mio e di Anthony)

Non ho PdfCreator e testando la mcro postata da Alea, veniva cancellato appunto il file xls (nella macro "macroPrintPDF1")
Come dice bene Anthony è opportuno fare due "discorsi" diversi tra la creazione file xls e pdf

In ogni caso la modifica della macro "flash" riguardo al messaggio di avviso in caso di file esistente andrebbe fatta.

ciao

EDIT: ho visto il tuo post (Alea), ok per il percorso ma devi cambiare in nome del file da cancellare NFile in quel caso non deve essere con estensione .xls ma .pdf, pertanto provvedi a modificare questa variabile nella seconda macro
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: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 23/01/12 11:36

Alea: hai numerosi post da leggere sopra di questo.

Ho notato che passando alla macro macroPrintPDF1 un nome file ".xls" la macro crea un ".pdf", ignorando cioe' l' estensione passatagli (e' una prestazione di PDFCreator, non della macro).

Questo avvalora l' ipotesi che in effetti Alea usa lo stesso nome "xyzwc.xls" sia per salvare il workbook che per stampare in pdf, col risultato evidenziato da Flash che macroPrintPDF1 cancella il workbook.

Va quindi modificata la macro "Flash", creando un filename che sia pdf; potrebbe andare bene
Codice: Seleziona tutto
NFile = Ditta & Offerta & Data & ".pdf"    'Aggiunta prima della Call
Call macroPrintPDF1(PercF & "\", NFile)   

L' inserimento nella macro "Flash" di un controllo che il file xls da creare esiste gia' e' una invariante; si puo' fare o non fare a seconda di come si vuole operare.

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

Re: Salvare 1 foglio con nome particolare

Postdi Alea » 23/01/12 14:25

Grazie mille ad entrambi
sono finalmente giunto ad una conclusione. Studiando un pochino ho separato le macro e adesso ne ho una che mi salva l'excel e una che fa il pdf.

Purtroppo però mi tocca ancora "rompere".... con una domandona:
partendo da qui
Codice: Seleziona tutto
Public Sub SalvaOFFERTA()
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & Data & ".xls"
    Sheets("OFFERTA").Select
    Sheets("OFFERTA").Copy
    ChDir PercF
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close
End Sub


se volessi aggiungere a questo file altri fogli? tipo il foglio "CAPITOLATO" va bene se scrivo così:
Codice: Seleziona tutto
Sheets(Array("OFFERTA", "CAPITOLATO")).Select
    Sheets(Array("OFFERTA", "CAPITOLATO")).Copy

lo chiedo perché ho provato e funziona.
Grazie
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Flash30005 » 23/01/12 15:28

Se funziona non vedo perché non dovresti farlo :D

Va bene separare le macro ma non vedo sulla prima il richiamo della seconda macro
Spero non attivi entrambi le macro manualmente!? :eeh:

Ma la seconda macro che crea il Pdf, non la pubblichi?

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: Salvare 1 foglio con nome particolare

Postdi Alea » 23/01/12 16:16

Di macro per la gestione di questo problema ne ho create 4.
3 funzionanti ma la quarta no.
Prima: salva un solo foglio
Codice: Seleziona tutto
Public Sub SalvaOFFERTA()
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & Data & ".xls"
    Sheets("OFFERTA").Select
    Sheets("OFFERTA").Copy
    ChDir PercF
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close
End Sub

Seconda: salva più fogli
Codice: Seleziona tutto
Public Sub SalvaOFFERTAing()
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & ".xls"
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Select
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Copy
    ChDir PercF
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close
End Sub

Terza: stampa con stesso percorso e stesso nome il file della prima
Codice: Seleziona tutto
Public Sub StampaOFFERTAinPDF()
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & Data & ".pdf"
    Sheets("OFFERTA").Select
    Sheets("OFFERTA").Copy
    ChDir PercF
    If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close
Call macroPrintPDF1(PercF & "\", NFile)    '<<< AGGIUNTA
End Sub

con richiamo a:
Codice: Seleziona tutto
Public Sub macroPrintPDF1(ByVal PercF As String, ByVal NFile As String)
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:05"))
On Error GoTo 0
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"
objPDFCreator.cPrinterStop = False
'attesa disponibilita' file finale
Do
   DoEvents
Loop Until Dir(PercF & NFile) = NFile
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
End Sub

Quarta: dovrebbe. :) ..ma non va.. :( . stampare in un unico pdf più fogli e invece mi crea più file pdf
Codice: Seleziona tutto
Public Sub StampaOFFERTAinginPDF()
Dim shArray As Sheets
Dim sh As Worksheet
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & ".pdf"
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Select
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Copy
    ChDir PercF
    If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close
Call macroPrintPDF1(PercF & "\", NFile)    '<<< AGGIUNTA
End Sub

Public Sub macroPrintPDF1(ByVal PercF As String, ByVal NFile As String)
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:05"))
On Error GoTo 0
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"
objPDFCreator.cPrinterStop = False
'attesa disponibilita' file finale
Do
   DoEvents
Loop Until Dir(PercF & NFile) = NFile
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
End Sub


comunque per tutte queste macro e per le altre che mi avete già aiutato a fare ho creato una userform per gestirle tutte insieme.
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 24/01/12 01:10

Scusate, non vi seguo piu'.
Se prima chiamavamo la macro di stampa col nome del file xls, adesso salviamo il file excel col nome del pdf?
Vedi nella "quarta":
Codice: Seleziona tutto
NFile = Offerta & "_" & Ditta & ".pdf"
'.
'.
'.
'.
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile    '<< qui NFile e' xyz.pdf
    ActiveWindow.Close
Call macroPrintPDF1(PercF & "\", NFile)    '<<< AGGIUNTA
Cioe' fai ActiveWorkbook.SaveAs col nome ",pdf"??

Non per nulla io avevo detto:
Va quindi modificata la macro "Flash", creando un filename che sia pdf; potrebbe andare bene

Codice: Seleziona tutto
    NFile = Ditta & Offerta & Data & ".pdf"    'Aggiunta prima della Call
    Call macroPrintPDF1(PercF & "\", NFile) 



A PARTE QUESTO, la "macroPrintPDF1" stampa solo il foglio attivo (vedi linea ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'stampa "Foglio")

Se vuoi stampare un intero file allora la cosa piu' semplice e' che ti crei una "macroPrintPDFAll", con lo stesso codice della macroPrintPDF1 a parte la riga che ti ho appena segnalata che deve diventare
Codice: Seleziona tutto
ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'Stampa la cartella


Un modo piu' strutturato e' quello di modificare la chiamata alla macroPrintPDF1, inserendo anche un flag se stampare solo il foglio o l' intera cartella, lo faro' appena trovo 10 minuti che non so che fare.

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

Re: Salvare 1 foglio con nome particolare

Postdi Alea » 25/01/12 09:05

Ho provato questa opzione ma non funziona correttamente.
Il file CB-TECH contiene 9 fogli.
i fogli da stampare sono questi 5: Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO

Quello che fa è creare un file excel virtuale con i fogli da stampare, però non stampa i fogli giusti. Nel senso che stampa i primi 3 e poi ne prende 2 che non devono essere stampati.

facendo partire questa macro:
Codice: Seleziona tutto
Public Sub StampaIngegnerePDFall()
Dim shArray As Sheets
Dim sh As Worksheet
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & Data & ".pdf"
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Select
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Copy
    ChDir PercF
    If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)
    ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
    ActiveWindow.Close
Call macroPrintPDFall(PercF & "\", NFile)    '<<< AGGIUNTA
End Sub
Public Sub macroPrintPDFall(ByVal PercF As String, ByVal NFile As String)
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:05"))
On Error GoTo 0
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
ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'Stampa la cartella
objPDFCreator.cPrinterStop = False
'attesa disponibilita' file finale
Do
   DoEvents
Loop Until Dir(PercF & NFile) = NFile
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
End Sub

mi da subito questo errore
Immagine



se clikko su "SI" prosegue la macro, se clikko su "NO" interrompe qui:
If Dir(PercF & NFile) = NFile Then Kill (PercF & NFile)
ActiveWorkbook.SaveAs Filename:=PercF & "\" & NFile
ActiveWindow.Close
Call macroPrintPDFall(PercF & "\", NFile) '<<< AGGIUNTA
End Sub
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 25/01/12 13:41

Quello che fa è creare un file excel virtuale con i fogli da stampare, però non stampa i fogli giusti. Nel senso che stampa i primi 3 e poi ne prende 2 che non devono essere stampati.

Ve l' ho detto che mi sono perso, non chiedetemi di rileggere e interpretare i 30 messaggi precedenti per capire; l' affermazione che ho riportato ha a che fare con la macro che "stampa" in formato pdf o con la logica del resto della macro?
Per quanto riguarda l' obiezione che stai salvando il file excel con un nome che termina con ".pdf" hai accertato qualcosa?

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

Re: Salvare 1 foglio con nome particolare

Postdi Alea » 25/01/12 14:07

Sinceramente mi sto perdendo anch'io un po' :lol:
Per ricapitolare quello che devo fare diciamo che i punti fissi sono:
- il nome del file (excel e pdf) è sempre lo stesso e viene "tirato fuori" da qui:
Codice: Seleziona tutto
Ditta = Worksheets("Riepilogo").Range("K3").Value
Offerta = "Offerta_nr_" & Replace(Worksheets("OFFERTA").Range("C58").Value, "/", "_")
Data = "_del_" & Replace(Worksheets("Riepilogo").Range("G1").Value, "/", ".")
NFile = Offerta & "_" & Ditta & Data & ".xls"    '<<<<< oppure .pdf

- il percorso dove questi nuovi file devono essere salvati è uguale per entrambi i casi:
Codice: Seleziona tutto
Perc = ThisWorkbook.Path
Slash1 = InStrRev(Perc, "\")    '<<<<< cartella origine
PercF = Left(Perc, Slash1 - 1)
Slash2 = InStrRev(PercF, "\")
PercF = Left(PercF, Slash2) & "04-OFFERTE_CONTRATTO"   '<<<< cartella destinazione

il mio scopo è quello di avere 4 macro:
1. salvare solo 1 foglio in .xls
2. salvare più fogli (nr 5) in .xls
3. creare 1 pdf per 1 foglio <<<<< confermo il tuo post di prima sul salvataggio in formato .pdf
4. creare 1 pdf per più fogli (nr 5)

I primi 3 casi funzionano. Il 4 mi crea 5 fogli separati mentre dovrebbe accorparli in un unico file pdf.
Per quanto riguarda il tuo ultimo suggerimento di cambiare questa riga:
Codice: Seleziona tutto
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'Stampa la cartella

con questa
Codice: Seleziona tutto
ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'Stampa la cartella

purtroppo non soddisfa le mie esigenze perché io non devo stampare in pdf tutto il file ma solo 5 fogli su 9 come descritti in questa riga:
Codice: Seleziona tutto
Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Select
    Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Copy

questa parte di codice funziona per creare il file .xls ma non funziona per il pdf.

Ciao intanto
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Flash30005 » 26/01/12 05:09

Beh allora visto, a questo punto, che sto capendo poco anche io
direi che
Alea ha scritto:con questa
Codice: Seleziona tutto
ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'Stampa la cartella
purtroppo non soddisfa le mie esigenze perché io non devo stampare in pdf tutto il file ma solo 5 fogli

Dovrebbe soddisfare la tua esigenza in quanto hai detto
Alea ha scritto:2. salvare più fogli (nr 5) in .xls

Che riesci a salvare il file con 5 fogli in xls
E' sufficiente stampare in Pdf l'intera cartella con 5 fogli appena creata o no?

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: Salvare 1 foglio con nome particolare

Postdi Alea » 26/01/12 08:08

Come ragionamento è giusto Flash. Purtroppo non sempre ho già il file .xls per poterlo stampare in pdf
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Flash30005 » 26/01/12 09:57

ehmmm
hai detto di voler creare macro diversificate...
a questo punto, quando ti occorre la stampa pdf dei 5 fogli,
farai in modo di creare prima il file xls (temporaneo)
lo stampi in pdf
e cancelli il file xls
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: Salvare 1 foglio con nome particolare

Postdi Alea » 26/01/12 10:08

...eeehhhh "chai ragione" :lol:
ci penso un attimo e faccio delle prove.
Grazie
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 26/01/12 10:11

A parte che prevedo sia possibile creare una macro di una stampa pdf su un elenco di fogli, sposo il suggerimento di Flash di creare un workbook di servizio con i fogli che ti interessano, cosa che ottieni con una sola istruzione del tipo
Codice: Seleziona tutto
Sheets(Array("Legenda", "Riepilogo", "Index", "OFFERTA", "CAPITOLATO")).Copy

Quando avro' tempo provero' a lavorare su una nuova "macroPrintPDF" universale (singolo foglio, blocco di fogli, tutti i fogli).

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

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Salvare 1 foglio con nome particolare":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti