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 » 26/01/12 10:14

Grazie mille Anthony
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Sponsor
 

Re: Salvare 1 foglio con nome particolare

Postdi d.cremaschi » 25/03/14 21:13

Codice: Seleziona tutto
Private Sub CommandButtonSave_Click()
'QUESTA FUNZIONA, le altre sono tutte prototipi manipolati
'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
'
'Dim objPDFCreator As PDFCreator.clsPDFCreator '>> Early Bind
Dim objPDFCreator  '<<<  Late Bind
'
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Hai definito le pagine da stampare?"    ' Definisce il messaggio.
Style = vbYesNo + vbCritical + vbDefaultButton2    ' Definisce i pulsanti.
Title = "A T T E N Z I O N E"    ' Definisce il titolo.
'Help = "DEMO.HLP"    ' Definisce il file della Guida (tralasciato)
'Ctxt = 1000    ' Definisce il contesto dell'argomento (tralasciato)
Response = MsgBox(Msg, Style, Title) ' Visualizza il messaggio
If Response = vbYes Then    ' in caso di scelta affermativa
Dim g As String 'definisco che la mia "g" è una stringa
Dim s As String 'definisco che la mia "s" è una stringa
Dim pagP As String 'definisco che la mia "pagP" è una stringa
Dim pagA As String 'definisco che la mia "pagA" è una stringa
g = ActiveSheet.Range("i11").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il nome del mio file
s = Sheets("SetUp").Range("M5").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il percorso dove salvare il file
pagA = Sheets("setup").Range("v11").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il numero della pagina iniziale
pagP = Sheets("SetUp").Range("v12").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il numero della pagina finale
'
On Error Resume Next
    If Dir(s & g) = g Then Kill (s & g)
    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") = s
.cOption("AutosaveFilename") = g
.cOption("AutosaveFormat") = 0
aaa = .cOption("AutosaveFilename")
.cVisible = False
.cClearCache
End With
'
'ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"   'stampa "Foglio"
ActiveSheet.PrintOut from:=pagA, to:=pagP, from:=1, to:=pagP, Copies:=1, ActivePrinter:="PDFCreator", Collate:=True, PrintToFile:=True, PrToFileName:=s & g & "_part1.pdf"
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 If '
End Sub

buongiorno a tutti, in particolare mi riferisco a Antony da cui ho preso suggerimenti per modificare il mio codice:
-la mia prima versione era più breve e funzionava anche se aveva una pecca, il file pdf veniva reato ma senza il logo della ditta e poi non utilizzavo ne PDFCreator e nemmeno Win7, abbiamo aggiornato i pc ed eccomi qua a chiedere umilmente aiuto.
Il mio problema è questo, per mia semplicità ho creato un file excell con delle macro che mi semplificano il salvataggio dei vari file; tramite un "command button" attivo la mia sub e creo un file pdf con nome e lo salvo dove dico io. Tutto questo avviene ma il file pdf che viene salvato risulta essere di oltre 400KB, quando invece dovrebbe aggirarsi sui 20/30KB e al momento dell'apertura
mi compare un messaggio del tipo" Adobe non è in grado di aprire il file perchè è un formato non supportato etc etc..."
d.cremaschi
Utente Junior
 
Post: 14
Iscritto il: 25/03/14 20:44

Re: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 25/03/14 22:43

Ciao d.cremaschi, benvenuto nel form.
Non mi e' chiaro che versione di Excel usi e quale metodo usi per generare il file pdf.

Qualsiasi sia il metodo, invece di generare il file via macro prova a generarlo manualmente (da comandi; es come Stampa foglio se usi PdfCreator) e controlla se in quel modo il pdf viene aperto e quale e' la dimensione file.

Ciao, ti aspettiamo.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Salvare 1 foglio con nome particolare

Postdi d.cremaschi » 26/03/14 19:34

Scusa, probabilmente sono stato un po frettoloso ieri:
-si ho fatto la prova che mi chiedi e mi salva un file di 24KB che riesco ad aprire regolarmente.
-il mio problema è che prima con ActiveSheet.PrintOut, riuscivo a creare il pdf, anche se non mi stampava l'immagine del logo, ora utilizzando la stessa proprietà con PDFCreator mi genera un file illeggibile.
-ho provato a utilizzare un codice da te postato in questo Form, l'ho adattato alle mie esigenze ma continuo ad avere i medesimi risultati.
-in più sul mio codice originale, il lancio del comando "print.out" seguiva il numero di copie, dalla pagina x alla y, etc
-nel foglio excell ho inserito un "CommandButton" che al click esegue il codice, di seguito ti posto nuovamente il codice aggiornato, ma ti dico subito che appena lo lancio mi da "errore di compilazione Sub o Function non definita"
-al momento sto lavorando con Office2010 e PDFCreator 1.7.2.

Codice: Seleziona tutto
Private Sub CommandButtonSave_Click()

'qui attivo una finestra di dialogo per ricordarmi di aver selezionato le pagine da stampare
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Hai definito le pagine da stampare?"    ' Definisce il messaggio.
Style = vbYesNo + vbCritical + vbDefaultButton2    ' Definisce i pulsanti.
Title = "A T T E N Z I O N E"    ' Definisce il titolo.
'Help = "DEMO.HLP"    ' Definisce il file della Guida (tralasciato)
'Ctxt = 1000    ' Definisce il contesto dell'argomento (tralasciato)
Response = MsgBox(Msg, Style, Title) ' Visualizza il messaggio
If Response = vbYes Then    ' in caso di scelta affermativa

Dim PDFname As String 'definisco che la mia "PDFname" è una stringa
Dim PDFperc As String 'definisco che la mia "PDFperc" è una stringa
Dim pagP As String 'definisco che la mia "pagP" è una stringa
Dim pagA As String 'definisco che la mia "pagA" è una stringa
PDFname = ActiveSheet.Range("i11").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il nome del mio file
PDFperc = Sheets("SetUp").Range("M5").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il percorso dove salvare il file
pagA = Sheets("setup").Range("v11").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il numero della pagina iniziale
pagP = Sheets("SetUp").Range("v12").Value 'vado ad indicare cosa rappresenta la cella indicata, ovvero il numero della pagina finale

'questa è la parte di codice che ho preso da quello che avevi postato
Dim objPDFCreator  '<<<  Late Bind

On Error GoTo ErrorMessage
    Dim pdfjob As Object
     
    'su quello tra parentesi non sono sicuro di averlo scritto correttamente
    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
     
    With pdfjob
        If .cStart("/NoProcessingAtStartup") = False Then KillProcess (PDFCreator.exe) Else
     
        .cOption("UseAutosave") = 1
        .cOption("UseAutosaveDirectory") = 1
        .cOption("AutosaveDirectory") = PDFperc
        .cOption("AutosaveFilename") = PDFname
        .cOption("AutosaveFormat") = 0
        .cClearCache
    End With
     
ActiveSheet.PrintOut from: pagA , to:=pagP, Copies:=1, ActivePrinter:="PDFCreator"  'dopo il PrintOut ho inserito io da pagina a pagina
objPDFCreator.cPrinterStop = False

   
    Do Until pdfjob.cCountOfPrintjobs = 1
        DoEvents
    Loop
    pdfjob.cPrinterStop = False
     
    'anche in questo caso non sono sicuro di aver compilato correttamente quello tra parentesi
    Do Until Dir("PDFperc PDFname.pdf") <> ""
    DoEvents
    Loop
    pdfjob.cClose
     
    Set pdfjob = Nothing
 End If
End Sub
d.cremaschi
Utente Junior
 
Post: 14
Iscritto il: 25/03/14 20:44

Re: Salvare 1 foglio con nome particolare

Postdi Anthony47 » 26/03/14 23:52

Come detto anche nell' altro discussione (viewtopic.php?f=26&t=101529&p=587916#p587916) Office 2010 ha di suo la possibilita' di esportare in formato pdf (Menu /File /Salva con nome), quindi non ha senso ricorrere a PdfCreator, come si fa con la macro di questa discussione.
Inoltre a me nessuna delle due macro che hai presentato qui funziona (run time error la prima, sull' istruzione ActiveSheet.PrintOut; errore di compilazione la seconda, per l' uso di una KillProcess che non esiste in vba e probabilmente doveva essere codificata in altro modulo).
Riconfermo invece che le due versioni di macro che avevo pubblicate in questa discussione mi funzionano regolarmente sia in XL2003 che XL2010:
-la prima viewtopic.php?f=26&t=94224#p538887, con nome file scritto nel codice;
-la seconda viewtopic.php?f=26&t=94224#p538991, versione da richiamare come "funzione" da altra macro, passando Percorso e NomeFile, es
Codice: Seleziona tutto
Sub testa()
Call macroPrintPDF1(ThisWorkbook.Path & "\", "pippoMONA.pdf")
End Sub

(ribadendo comunque che se hai XL2010 e' meglio usare le capacita' native di excel senza ricorrere a pdfcreator)

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

Precedente

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti