Condividi:        

macro per stampare e salvare

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

macro per stampare e salvare

Postdi bsth » 16/04/15 10:53

Salve a tutti, sono nuovo del forum ma vi leggo da un po.
ho notato una grande disponibilità nell'aiutare con consigli concreti chi ha bisogno di aiuto.
ora sono io ad aver bisogno e si tratta haimè delle solite macro di excel.....sono due giorni che provo a crearmi una macro per un file di lavoro ma inutilmente, chiedo a voi se riuscite ad aiutarmi:
si tratta di excel 2010.
il documento che ho creato deve essere compilato obbligatoriamente in alcuni campi, 12 per l'esattezza e nel mio caso ipotizziamo da A1 a A12.
alla fine del documento creo un tasto inserendo una forma con testo interno. questo tasto dovrebbe: salvare il file in pdf dentro una cartella specifica in documenti, inviarmi la stampa ad una stampante predefinita e alla fine delle operazioni chiudersi automaticamente non salvando i dati riportati nei campi obbligatori, il documento pdf salvato in precedenza dovrebbe avere già tutti i dati memorizzati.
Ho provato diverse soluzioni ma sono riuscito solo a stampare con i campi compilati ma non salvare, sono riuscito a salvare in pdf ma non mi stampa.....qualcuno in gamba come voi puo aiutarmi?
grazie.
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Sponsor
 

Re: macro per stampare e salvare

Postdi Anthony47 » 16/04/15 14:53

Ciao bsth, benvenuto nel forum.
Per quanto riguarda la stampa, il mio suggerimento e' che mandi in stampa il file pdf creato, di cui certamente conosci gia' il nome. Userai per questo un' istruzione di questo tipo:
Codice: Seleziona tutto
RetVal = ShellExecute(vbNull, "Print", "C:\Users\UTENTE\DIRECTORY\NomeDocumento.pdf", "", "", vbNormalFocus)

In testa al modulo avrai dichiarato la funzione ShellExecute, usando questo codice:
Codice: Seleziona tutto
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long


A quel punto, ti bastera' chiudere il file senza salvare:
Codice: Seleziona tutto
ThisWorkbook.Close savechanges:=False


Puo' essere utile inserire una macro di "before_save", in realta' per impedire il salvataggio; per questo metterai nel modulo
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
    MsgBox ("Il file non va salvato; usare il pulsante per salvare in formato pdf")
End Sub


Credo pero' che la strada piu' logica sia quella di creare un "Modello", che corrisponde al tuo file iniziale, e creare nuovi file basandosi su questo modello; in questo modo il Modello rimane per definizione invariato, anche se l' utente dovesse salvare il suo documento.

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

Re: macro per stampare e salvare

Postdi bsth » 17/04/15 05:49

:-)
ammetto di avere de limiti, ho provato ma non mi funziona niente, non salva, non stampa, non converte in pdf e non si chiude.
Il modello l'ho già preparato ed è su quello che stò lavorando per riuscire a fare quello di cui necessito.
Il modello viene utilizzato da molte persone che prendono chiamate in un centralino e che dovranno compilare i campi obbligatori di cui scrivevo nel mio primo messaggio, un loro errore è una problema che va rindondando in tutta la catena organizzativa che segue alcune di queste persone hanno un cattivo rapporto con il computer è quindi mia volontà semplificare il più possibile le operazioni. Con un solo comando il file viene salvato in pdf con un nome composto dalle informazioni all'interno di una casella+data+ora del momento della compilazione all'interno di una cartella definita a priori. Dopo di che viene inviato ad una stampante (non importa che sia necessariamente il pdf ad essere inviato in stampa ma il modulo che si è compilato e non importa se mi inverte le due operazioni cioè prima stampa e poi converte), alla fine il file viene chiuso senza il salvataggio dei dati riportati nei campi obbligatori. Una nuova compilazione richiederà poi una riapertura del documento dall'icona predefinita.
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Anthony47 » 17/04/15 12:05

Ho provato diverse soluzioni ma sono riuscito solo a stampare con i campi compilati ma non salvare, sono riuscito a salvare in pdf ma non mi stampa.....

ho provato ma non mi funziona niente, non salva, non stampa, non converte in pdf e non si chiude.

Quale e' la versione giusta?
Il problema e' che rileggendo tutto non si capisce che cosa hai gia' fatto e che cosa e' invece e' solo frutto della fantasia.
Puoi fare chiarezza?

Serve anche sapere quale versione di Excel usi.

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

Re: macro per stampare e salvare

Postdi bsth » 21/04/15 18:29

come ho specificato nel mio primo messaggio l'excel è versione 2010.
quello che ho fatto non funziona bene o per un motivo o per un altro, per cui ritengo doveroso ripartire da capo con la programmazione della macro completa.
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Anthony47 » 21/04/15 19:52

Allora ripartiamo da zero...
Per salvare il file in formato pdf ti bastera' registrare una macro mentre esegui un Salva con Nome, scegliendo il tipo di file = Pdf.
In questa fase userai un nome fisso; poi pubblichi il codice registrato e descrivi quale regola vuoi adottare per impostare il nome file e noi faremo le modifiche al codice per salvare direttamente col nome file desiderato.
Prova a integrare la macro con le istruzioni che ti avevo gia' dato per la stampa, lavorando sempre coil nome file fisso; devi inserire, dopo il salvataggio come pdf, l' istruzione RetVal = Etc etc e inserire in cima al modulo la dichiarazione della funzione ShellExecute.
Collauda la macro cosi' modificata, e allegaci il codice con l' indicazione dell' esito del tuo collaudo.

Per evitare di "chiudere il file senza salvarlo", che interromperebbe l' esecuzione di una macro salvata su quel file, a quel punto conviene dire alla macro di azzerare i 12 campi che l' utente compila; per questo scrivi quali sono queste 12 celle e tradurremo tutto in codice.

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

Re: macro per stampare e salvare

Postdi bsth » 24/04/15 18:02

Non effettua nessuna operazione, ho inserito queste stringhe:


Codice: Seleziona tutto
Sub Macro1()
'Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
' 'Dim objPDFCreator As PDFCreator.clsPDFCreator '>> Early Bind
Dim objPDFCreator  '<<<  Late Bind
Dim Perc As String
Dim Nome As String
'
Nome = "24-04-2015-17-38.pdf" 'Worksheets("ORIGINALE").
Perc = ThisWorkbook.Path
'
On Error Resume Next
    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
'Area2 = "D3,D6,J6,D8,D11,C27,G27,K27,E29,D32,D35,E47"
    For Each cella In Range(Area2)
        If cella.Value = "" Then
        Application.ScreenUpdating = True
            MsgBox Prompt:="La cella " & cella.Address & " è vuota! ", _
                      Buttons:=vbCritical, _
                      Title:="Avvertimento!"
                      cella.Select
                      'Errore = 1
            Exit Sub
        End If

ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"   'stampa "Foglio"
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
'RetVal = ShellExecute(vbNull, "Print", "C:\Users\UTENTE\DIRECTORY\NomeDocumento.pdf", "", "", vbNormalFocus)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
    MsgBox ("Il file non va salvato; usare il pulsante per salvare in formato pdf")
RetVal = Etc etc
End Sub
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Anthony47 » 26/04/15 19:05

Quel codice fu pubblicato come Sub macroPrintPDF nel 2012 in risposta a un quesito dell' utente Alea che usava XL2003; ma tu usi XL2010 che ha "di suo" il salvataggio in formato pdf, quindi lascia stare.

Anthony ha scritto:Per salvare il file in formato pdf ti bastera' registrare una macro mentre esegui un Salva con Nome, scegliendo il tipo di file = Pdf.

bsth ha scritto:Non effettua nessuna operazione

A me funziona... Se spieghi dettagliatamente che cosa fai, step by step, e che cosa ottieni, allora posso fare una ipotesi; altrimenti posso solo dire "formatta il tuo pc" e installa Excel :D

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

Re: macro per stampare e salvare

Postdi bsth » 28/04/15 06:37

ok... ci rinuncio.....probabilmente non ho le capacità per far capire cosa mi serve, credevo che la descrizione che ho dato nei messaggi precedenti fosse di aiuto ma evidentemente non è così e io non saprei più cosa specificare quando mi chiedi "dettagliatamente", avevo scritto tutto passo per passo.
grazie comunque
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Anthony47 » 28/04/15 12:16

Perdona l' ulteriore disturbo...
Anthony ha scritto:Allora ripartiamo da zero...
Per salvare il file in formato pdf ti bastera' registrare una macro mentre esegui un Salva con Nome, scegliendo il tipo di file = Pdf.
In questa fase userai un nome fisso; poi pubblichi il codice registrato e descrivi quale regola vuoi adottare per impostare il nome file e noi faremo le modifiche al codice per salvare direttamente col nome file desiderato.
Prova a integrare la macro con le istruzioni che ti avevo gia' dato per la stampa, lavorando sempre coil nome file fisso; devi inserire, dopo il salvataggio come pdf, l' istruzione RetVal = Etc etc e inserire in cima al modulo la dichiarazione della funzione ShellExecute.
Collauda la macro cosi' modificata, e allegaci il codice con l' indicazione dell' esito del tuo collaudo.

In risposta bsth ha scritto:Non effettua nessuna operazione [. . .]


Ora scrivi che "avevo scritto tutto passo per passo"....
Quindi la domanda e': mi sono perso qualche messaggio?

Se ti interessa ancora noi siamo qui....
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per stampare e salvare

Postdi bsth » 29/04/15 06:12

Riporto il messaggio:

17/04/15 05:49

ammetto di avere de limiti, ho provato ma non mi funziona niente, non salva, non stampa, non converte in pdf e non si chiude.
Il modello l'ho già preparato ed è su quello che stò lavorando per riuscire a fare quello di cui necessito.
Il modello viene utilizzato da molte persone che prendono chiamate in un centralino e che dovranno compilare i campi obbligatori di cui scrivevo nel mio primo messaggio, un loro errore è una problema che va rindondando in tutta la catena organizzativa che segue alcune di queste persone hanno un cattivo rapporto con il computer
è quindi mia volontà semplificare il più possibile le operazioni. Con un solo comando il file viene salvato in pdf con un nome composto dalle informazioni all'interno di una casella+data+ora del momento della compilazione all'interno di una cartella definita. Dopo di che viene inviato ad una stampante (non importa che sia necessariamente il pdf ad essere inviato in stampa ma il modulo che si è compilato e non importa se mi inverte le due operazioni cioè prima stampa e poi converte), alla fine il file viene chiuso senza il salvataggio dei dati riportati nei campi obbligatori. Una nuova compilazione richiederà poi una riapertura del documento dall'icona predefinita.
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Anthony47 » 29/04/15 09:19

è quindi mia volontà semplificare il più possibile le operazioni
Ok, hai la nostra approvazione (che serve a poco), vai avanti....
Se pero' per andare avanti chiedi anche il nostro aiuto allora dovresti leggere che cosa ti scriviamo e cercare di eseguirlo; salvo che non pensi che lo facciamo per farti perdere tempo nel qual caso ci ignori totalmente e non succede niente.

Ora, in un messaggio successivo a quello che hai citato, io ti scrissi una serie di cose che avresti dovuto fare, concludendo "poi pubblichi il codice registrato e descrivi quale regola vuoi adottare per impostare il nome file e noi faremo le modifiche al codice per salvare direttamente col nome file desiderato".

Poiche' pero' pensi che sia meglio che noi facciamo il lavoro scemo e tu fai quello sofisticato allora ho seguito io le mie istruzioni, arrivando a questo codice:
Codice: Seleziona tutto
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Sub Macro100()
'by Anthony
Sheets("MioFoglio").Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\Utente1\Directory1\pippo_prova_B50429.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
ActiveWorkbook.Close savechanges:=False
'
RetVal = ShellExecute(vbNull, "Print", "C:\Users\Utente1\Directory1\pippo_prova_B50429.pdf", "", "", vbNormalFocus)
'
Workbooks.Open Filename:="C:\Users\Utente1\Directory2\NomeFile.xlsm"
'
End Sub
Ora lo devi personalizzare con i dettagli che non hai voluto svelarci.
La macro da eseguire e' Macro100.
Il codice va inserito in un modulo vuoto del personal.xlsm (o .xlsb) e poi va agganciato a un pulsante che inserirai sul foglio di lavoro.

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

Re: macro per stampare e salvare

Postdi Anthony47 » 29/04/15 09:27

Anzi, visto che dici di aver gia' creato il modello su cui lavorare, invece di aprire il file xlsm (o xlsx), puoi direttamente creare un nuovo file usando quel modello.
Cioe', NON
Workbooks.Open Filename:="C:\Users\Utente1\Directory2\NomeFile.xlsm"
ma
Codice: Seleziona tutto
    Workbooks.Add Template:= "C:\Percorso\completo\delModello\MioModello.xltx"

Questo ti protegge anche da eventuali salvataggi non voluti del file originale.

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

Re: macro per stampare e salvare

Postdi bsth » 30/04/15 05:22

E quì si denota la mia scarsa preparazione......per "modello" preparato mi riferisco al documento di Excel......mentre invece mi sembra di aver capito che tu ti riferisci al modello di macro giusto?
se intendi la seconda ipotesi il modello di macro non l'ho fatto, stò cercando di crearlo ex novo per questo non mi ci ritrovavo con le stringhe di comandi che mi hai postato !!! a volte una parola può incasinare tutto un discorso...
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi bsth » 30/04/15 05:42

Anthony47 ha scritto:
è quindi mia volontà semplificare il più possibile le operazioni
Ok, hai la nostra approvazione (che serve a poco), vai avanti....
Se pero' per andare avanti chiedi anche il nostro aiuto allora dovresti leggere che cosa ti scriviamo e cercare di eseguirlo; salvo che non pensi che lo facciamo per farti perdere tempo nel qual caso ci ignori totalmente e non succede niente.

Ora, in un messaggio successivo a quello che hai citato, io ti scrissi una serie di cose che avresti dovuto fare, concludendo "poi pubblichi il codice registrato e descrivi quale regola vuoi adottare per impostare il nome file e noi faremo le modifiche al codice per salvare direttamente col nome file desiderato".

Poiche' pero' pensi che sia meglio che noi facciamo il lavoro scemo e tu fai quello sofisticato allora ho seguito io le mie istruzioni, arrivando a questo codice:
Codice: Seleziona tutto
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Sub Macro100()
'by Anthony
Sheets("MioFoglio").Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\Utente1\Directory1\pippo_prova_B50429.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
ActiveWorkbook.Close savechanges:=False
'
RetVal = ShellExecute(vbNull, "Print", "C:\Users\Utente1\Directory1\pippo_prova_B50429.pdf", "", "", vbNormalFocus)
'
Workbooks.Open Filename:="C:\Users\Utente1\Directory2\NomeFile.xlsm"
'
End Sub
Ora lo devi personalizzare con i dettagli che non hai voluto svelarci.
La macro da eseguire e' Macro100.
Il codice va inserito in un modulo vuoto del personal.xlsm (o .xlsb) e poi va agganciato a un pulsante che inserirai sul foglio di lavoro.

Ciao


non riesco a capire dove devo inserire tra questi comandi tutti i riferimenti delle caselle da compilare obbligatoriamente prima del salvataggio del foglio di lavoro e dove inserire il nome che mi piacerebbe date al documento salvato in pdf con data e ora della compilazione e magari il contenuto di una casella (che sarebbe il nome e cognome di chi fa compilare il documento).
ovviamente se inserisco pari pari i comandi che mi hai gentilmente scritto senza personalizzarli non funziona.
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Anthony47 » 30/04/15 19:53

Un "Modello" e' un file precompilato e preformattato su cui si puo' basare una Cartella di lavoro.
Vedi https://support.office.com/it-it/articl ... d445d50cb4
Oppure
https://support.office.com/it-it/articl ... 704932b9fe
https://support.office.com/it-it/articl ... 67ccc8ca43

Insomma crei la tua cartella di lavoro base e la salvi come "Modello"; a questo punto puoi ripartire da questo modello per ogni nuovo documento, in modo che il punto di partenza sia sempre lo stesso anche se per errore qualche utente abbia salvato il file.

Quanto a
non riesco a capire dove devo inserire tra questi comandi tutti i riferimenti delle caselle da compilare obbligatoriamente

Io sono (ri)partito da questa tua affermazione:
Con un solo comando il file viene salvato in pdf con un nome composto dalle informazioni all'interno di una casella+data+ora del momento della compilazione all'interno di una cartella definita. Dopo di che viene inviato ad una stampante (non importa che sia necessariamente il pdf ad essere inviato in stampa ma il modulo che si è compilato e non importa se mi inverte le due operazioni cioè prima stampa e poi converte), alla fine il file viene chiuso senza il salvataggio dei dati riportati nei campi obbligatori. Una nuova compilazione richiederà poi una riapertura del documento dall'icona predefinita.

Che io avevo tradotto in.
-vorrei il vostro aiuto per salvare in formato pdf un foglio di lavoro compilato con un tot di campi, stampare il file pdf, chiudere la cartella di lavoro senza salvataggio, ripartire con una cartella di lavoro pronta per una nuova compilazione.

Le caselle da compilare obbligatoriamente non c'entrano con quanto richiesto richiesta; per questo dovresti aprire una nuova discussione.

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

Re: macro per stampare e salvare

Postdi bsth » 04/05/15 17:58

cioè dovrei richiedere tutte le informazioni in un altro post?!
non è possibile che mi creiate la macro in questo?
ditemi di cosa avete bisogno per creare la macro che vi chiedo nella mia descrizione?

grazie
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi Flash30005 » 04/05/15 22:54

Forse è opportuno che alleghi il file che hai creato e su quello possiamo inserire la/le macro e procedere per passi
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: macro per stampare e salvare

Postdi bsth » 07/05/15 05:35

come faccio ad inserire il file in questo messaggio?
bsth
Utente Junior
 
Post: 10
Iscritto il: 16/04/15 10:01

Re: macro per stampare e salvare

Postdi ricky53 » 07/05/15 14:34

Ciao
leggi QUI
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "macro per stampare e salvare":


Chi c’è in linea

Visitano il forum: Nessuno e 75 ospiti