Condividi:        

CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

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

CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi luca62 » 29/12/14 10:58

Salve a tutti,
Ho un file con tante cartelle di lavoro,ciascuna della quale può essere piena di dati,
o vuota, e ad esempio una cartella di lavoro ha dati per 3 pagine di stampa,un altra
per 1 pagina di stampa.
è possibile fare una macro per stampare tutte le prime pagine di tutte le cartelle di lavoro
(tranne le ultime 7) che hanno ad esempio la cella c4 diversa da zero, tutte le seconde pagine
che hanno ad esempio la cella c30 diversa da zero, tutte le terze pagine cha hanno la cella
c 59 diversa da zero e infine tutte le quarte pagine di tutt e le cartelle (sempre tranne le ultime 7)
che hanno c 89 diversa da zero?

SPero di essermi spiegato!
luca62 office2007 window7
luca62
Utente Senior
 
Post: 173
Iscritto il: 23/12/12 14:54

Sponsor
 

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi Zer0Kelvin » 29/12/14 11:31

Ciao.
Prima un piccolo chiarimento
Ho un file con tante cartelle di lavoro
presumo tu volessi dire:
"Ho un file con tanti FOGLI di lavoro", giusto?
In tal caso (quasi) tutto ciò che ti serve è questo:
Guida di riferimento per sviluppatori di Excel
Worksheet.PrintOut, metodo
Stampa l'oggetto.
Sintassi

espressione.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

espressione Variabile che rappresenta un oggetto Worksheet.

Parametri

Nome Obbligatorio/Facoltativo Tipo di dati Descrizione
Da Facoltativo Variant Specifica il numero della pagina iniziale da stampare. Se questo argomento viene omesso, la stampa inizierà dalla prima pagina.
A Facoltativo Variant Specifica il numero della pagina finale da stampare. Se questo argomento viene omesso, la stampa terminerà con l'ultima pagina.
Copie Facoltativo Variant Specifica il numero di copie da stampare. Se questo argomento viene omesso, verrà stampata una sola copia.
Anteprima Facoltativo Variant Se ha valore True, l'anteprima verrà visualizzata prima di stampare l'oggetto. Se ha valore False o viene omesso, l'oggetto verrà stampato immediatamente.
ActivePrinter Facoltativo Variant Imposta il nome della stampante attiva.
Eccetera...

Puoi impostare un ciclo per tutti i Worksheet del Workbook tranne gli ultimi 7.
Per es:
Codice: Seleziona tutto
For I=1 to Workseets.Count-7
...
Next I
All'interno del ciclo controllare il valore delle celle che ti interessano
Codice: Seleziona tutto
IF Workbooks(i).Range("C4")<>0 then...

e poi stampare la pagina richiesta
Codice: Seleziona tutto
Workbooks(i).PrintOut From:=1, TO:=1 'stampa la pagina numero 1
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi luca62 » 29/12/14 12:24

ho provato a compilarla così ma...non va mi da errore di sintassi!

Sub stampa()
'
' stampa Macro
'

'
For i = 1 To Workseets.Count - 8

Next i
IF Workbooks(i).Range("C4")<>0
Workbooks(i).PrintOut From:=1, TO:=1 'stampa la pagina numero 1
IF Workbooks(i).Range("C30")<>0
Workbooks(i).PrintOut From:=2, TO:=2 'stampa la pagina numero 2
IF Workbooks(i).Range("C59")<>0
Workbooks(i).PrintOut From:=3, TO:=3 'stampa la pagina numero 3
IF Workbooks(i).Range("C89")<>0
Workbooks(i).PrintOut From:=4, TO:=4 'stampa la pagina numero 4
Application.Goto Reference:="stampa"
End Sub

come mai?
luca62 office2007 window7
luca62
Utente Senior
 
Post: 173
Iscritto il: 23/12/12 14:54

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi luca62 » 29/12/14 14:56

avevo dimenticato il then.. Ma ora mi da errore ERRORE DI COMPILAZIONE Blocco If senza End if
eppure l'ho messo......cosa sbaglio?

Sub stampa()
'
' stampa Macro
'

'
For i = 1 To Worksheets.Count - 8

Next i
If Workbooks(i).Range("C4") <> 0 Then
Workbooks(i).PrintOut From:=1, To:=1 'stampa la pagina numero 1
If Workbooks(i).Range("C30") <> 0 Then
Workbooks(i).PrintOut From:=2, To:=2 'stampa la pagina numero 2
If Workbooks(i).Range("C59") <> 0 Then
Workbooks(i).PrintOut From:=3, To:=3 'stampa la pagina numero 3
If Workbooks(i).Range("C89") <> 0 Then
Workbooks(i).PrintOut From:=4, To:=4 'stampa la pagina numero 4
End If
Application.Goto Reference:="stampa"
End Sub
luca62 office2007 window7
luca62
Utente Senior
 
Post: 173
Iscritto il: 23/12/12 14:54

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi Anthony47 » 29/12/14 19:31

La struttura giusta e', per ogni If
Codice: Seleziona tutto
If ..1.. then
   Cosa fare1
End If
If ..2.. then
   Cosa fare2
End If


Potresti anche usare
Codice: Seleziona tutto
If .1.. then  Cosa fare1      'se "cose da fare" sta' su una riga
If ..2.. then Cosa fare2
If ..3.. then Cosa fare3


Potresti anche valutare
Codice: Seleziona tutto
If ..1.. then
   Cosa fare1
Elseif ..2..
   Cosa fare2
Elseif ..3..
   Cosa fare3
. . .
End If


Con la sintassi 1 e 2 ogni If viene valutato e possono essere eseguite piu' "Cosa fare"; con la sintassi 3 viene eseguita una sola "Cosa fare"

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

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi Zer0Kelvin » 29/12/14 20:02

Ciao.
Come specificato da Antony, l'istruzione if va, nel tuo caso, tutta su una riga.
Le istruzioni if devono essere inserite all'interno del ciclo For...Next di modo che vengano ripetute per ogni foglio
Codice: Seleziona tutto
For i = 1 To Worksheets.Count - 8
     If Workbooks(i).Range("C4") <> 0 Then Workbooks(i).PrintOut From:=1, To:=1 'stampa la pagina numero 1
     If Workbooks(i).Range("C30") <> 0 Then ...eccetera
     ...eccetera
Next i
Ad ogni ciclo Workbooks(i) sarà uguale, di volta in volta, a Workbooks(1), Workbooks(2) e così via.
Se l'ordine di stampa delle pagine è importante (come dici tu, prima tutte le prime pagine, poi le seconde e così via) occorrerebbe usare quattro cicli For...Next in sequenza oppure una matrice e due cicli nidificati.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi karl69 » 29/12/14 21:49

Ma scusami l'IF con Workbooks o con Worksheets?
karl69
Newbie
 
Post: 2
Iscritto il: 29/12/14 21:31

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi Zer0Kelvin » 30/12/14 00:22

...perdonami, doveva essere Worksheets, Workbooks non c'entra nulla; dovevo avere la mente altrove (su Marte, probabilmente :lol: ) ed il copia/incolla ha fatto il resto.
Sempre ammesso che stiamo parlando di fogli, naturalmente...
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi luca62 » 30/12/14 09:51

PENSO SIA GIUSTO CHE INSERISCA LA MACRO FUNZIONANTE GRAZIE AL LAVORO DI ANTONY E ZEROKELVIN
(IO HO SOLO MODIFICATO PER PERSONALIZZARE A SECONDO DELLE MIE ESIGENZE,IN PRATICA..NON HO FATTO
NIENTE!)
IN MANIERA CHE ALTRI ..MENO ESPERTI COME ME NE POSSONO USUFRUIRE
GRAZIE ANCORA!


Sub stampa()
'
' stampa Macro
'


'
For i = 1 To Worksheets.Count - 8

If Worksheets(i).Range("C89") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=4 'stampa la pagina numero 1+2+3+4

ElseIf Worksheets(i).Range("C59") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=3 'stampa la pagina numero 1+2+3

ElseIf Worksheets(i).Range("C30") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=2 'stampa la pagina numero 1+2

ElseIf Worksheets(i).Range("C4") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=1 'stampa la pagina numero 1

End If
Application.Goto Reference:="stampa"


Next i


End Sub
luca62 office2007 window7
luca62
Utente Senior
 
Post: 173
Iscritto il: 23/12/12 14:54

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi luca62 » 14/01/15 12:51

Ciao a tutti, ho un piccolo problema su questa macro confezionata dagli esperti del sito e da me personalizzata
(ecco dove sta forse il problema).
allego la macro

Codice: Seleziona tutto
   Sub stampa()
'
' stampa Macro
'


'
For i = 1 To Worksheets.Count - 8
ActiveSheet.Unprotect
If Worksheets(i).Range("C89") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=4 'stampa la pagina numero 1-4
ElseIf Worksheets(i).Range("C59") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=3 'stampa la pagina numero 1+2+3
ElseIf Worksheets(i).Range("C30") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=2 'stampa la pagina numero 1+2
ElseIf Worksheets(i).Range("C3") <> 0 Then
Worksheets(i).PrintOut From:=1, To:=1 'stampa la pagina numero 1
End If
Application.Goto Reference:="stampa"
Next i
End Sub


Questa macro ,tramite un pulsante,mi permette di stampare tutti i fogli tranne gli ultimi 8, ma in realtà, dopo aver stampato
il primo foglio,ed il secondo, mi si blocca (invece di stampare gli n fogli) .
Per farla funzionare a dovere, devo prima sproteggere il foglio 2 poi cliccare sul pulsante per attivare
la macro ,cosa c ' è di sbagliato che mi fa bloccare la procedura se il foglio 2 è protetto?
luca62 office2007 window7
luca62
Utente Senior
 
Post: 173
Iscritto il: 23/12/12 14:54

Re: CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO

Postdi Anthony47 » 14/01/15 15:35

Non so il significato della riga ActiveSheet.Unprotect, che sprotegge il foglio su cui e' posizionato il pulsante; ne' della riga Application.Goto Reference:="stampa", ripetuta in tutto il ciclo For i /Next i.
Prova a rimuovere la riga riga Application.Goto, oppure verifica che quando proteggi il foglio sia consentita la selezione dele celle protette.

Per favore utilizza i tag Code per "incorniciare" il tuo codice.

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


Torna a Applicazioni Office Windows


Topic correlati a "CREAZIONE MACRO PER STAMPARE FOGLI DI LAVORO":


Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti