Condividi:        

Stampa di più fogli con un'unica 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

Stampa di più fogli con un'unica macro

Postdi Cesare2010 » 10/03/11 18:39

Buona sera a tutti, sono Cesare e ritorno sul forum con un piccolo (spero!) problema.
Su di un foglio "Stampe varie" ho creato una serie di pulsanti, per ciascuno dei quali ho assegnato una macro di stampa di un singolo altro foglio (GS, PUMA, PURA, CD, CDRA, SV, ecc..), della quale ne posto il codice:

Codice: Seleziona tutto
Sub StampaCD()
    Application.ScreenUpdating = False
   
    Workbooks.Open Filename:="C:\Archivio\Elenchi generali stagione.xls", UpdateLinks:=3
    Sheets("CD").Visible = True
    Sheets("CD").Select
    Range("A11:O1100").Select
    Righe = Selection.Rows.Count + 1
    For C = Righe To 12 Step -1
        If Cells(C, 12).Value = "" Then
            Cells(C, 12).EntireRow.Hidden = True
        End If
    Next
    Range("A1").Select
        ActiveWindow.SelectedSheets.PrintOut From:=1, Copies:=1, Collate:=True
    Cells.Select
    Selection.EntireRow.Hidden = False
    Range("A1").Select
    ActiveWorkbook.Close SaveChanges = True
   
    Application.ScreenUpdating = True

End Sub


Al di là della selezione del foglio da stampare, il codice è uguale per tutti i pulsanti di stampa.
Ho provato a scrivere un'altra macro, peraltro scopiazzata su forum:

Codice: Seleziona tutto
Sub Stampa()

Sheets(Array("GS", "PUMA", "PURA", "CD", "CDRA", "SV", "VIP", "DGPC")). Select

For I = 1 To 8
Range("A11:=1100").Select
Righe = Selection.Rows.Count + 1
For c = Righe To 12 Step -1
If Cells(c, 12).Value = "" Then
Cells(c, 12).EntireRow.Hidden = True
End If
Next c
Next I
Sheets("GS").Activate
ActiveWorkbook.PrintOut
End Sub


Ma, la seconda macro:
1) ci impiega "una vita" a nascondere le righe dove non ci sono dati da stampare;
2) stampa tutti i fogli selezionati (.... lo sapevo! Era solo una prova.) e non è ciò che si vuole.

Domanda (Help me please!!!! :cry: :cry: :cry: ):
esiste un modo per evitare di scrivere 8, o anche più, macro e far sì che cliccando sul pulsante collegato al foglio (es.: PUMA) stampi solo questo?

Spero con tutto il cuore di essere stato chiaro.

Grazie per tutto l'aiuto che mi possa essere dato.

Cesare.
Cesare2010
Utente Junior
 
Post: 30
Iscritto il: 31/01/11 17:37

Sponsor
 

Re: Stampa di più fogli con un'unica macro

Postdi Anthony47 » 11/03/11 14:34

Nella prima macro che hai presentato ci sono alcune operazioni di impatto non valutabile, tipo UpdateLinks:=3, cioe' aggiornare i collegamenti esterni e remoti: quanti link esterni ci sono? Verso un file aperto o chiuso? Quanti link remoti, cioe' verso applicazioni diverse da excel?
Ci sono operazioni inutili, tipo Righe = Selection.Rows.Count + 1 perche' sai a priori che restituisce 1091, quindi potresti risparmiare qualche microsecondo.
Come pure e' inutile chiudere il file con SaveChanges = True: il foglio quali modifiche ha subito? Tanto vale chiudere con SaveChanges = False e sei anche certo di non combinare guai con modifiche accidentali, oltre che risparmiare secondi.

Veniamo pero' alla domanda, che come la capisco io e': Come posso stampare fogli diversi usando pulsanti diversi?
Il mio suggerimento e' di creare N pulsanti tramite la barra degli strumenti Moduli (non Strumenti di controllo) e assegnargli testi diversi quali "Stampa GS", "Stampa PUMA", etc; a tutti assegni la stessa macro che oggi chiami StampaCD che pero' modificherai come segue:
-chiudi il file con Savechange=False
-aggiungi in testa l' istruzione
PrSh = Replace(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text, "Stampa ", "")
-invece di scrivere Sheets("CD").Visible o Sheets("CD").Select userai Sheets(PrSh).etc

In questo modo e' il testo assegnato al tasto che determina quale foglio verra' stampato. Per questo le scritte nel pulsante devono essere esattamente come ho detto, oppure basta adattare l' istruzione PrSh = Etc etc

Ovviamente se devono sempre essere stampati piu' fogli o tutti i fogli l' approccio potrebbe cambiare; es aprire una sola volta il file e mantenerlo aperto, oppure creare tasti che in sequenza stampano piu' combinazione di tasti.

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

Re: Stampa di più fogli con un'unica macro

Postdi Cesare2010 » 11/03/11 17:45

Buona sera Antony, Cesare writing.
Prima di ogni altra cosa, cercherò di rispondere alle tue perplessità:
- l'operazione del tipo UpdateLinks:=3 fu inserita dal registratore automatico;
- hai perfettamente ragione per quanto riguarda le operazioni: "Righe=Selection.....ecc." ed il "SaveChanges=False"; potevo tranquillamente accorgemene da solo :oops: :oops: :oops:
- no.... non devono essere sempre stampati più/tutti i fogli, l'operazione di stampa è fatta "a richiesta".

Torniamo al mio "piccolo" problema e che tu, GRANDE, hai intuito alla perfezione.
Nel premetterti che i pulsanti sono già stati creati tramite la barra di strumenti Moduli, ho provveduto a mettere in pratica i tuoi suggerimenti (spero per il mio bene :) - ricordati, però che sono un neofita!), ma..... e di certo c'è ancora qualcosa che non va, ora non vengono eliminate le righe che non riportano dati. In altre parole ora la stampa è del foglio completo anche delle righe vuote.
Di seguito posto la macro riscritta:

Codice: Seleziona tutto
Sub StampaCD()
    Application.ScreenUpdating = False
   
PrSh = Replace(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text, "Stampa ", "")
   
    Workbooks.Open Filename:="C:\Archivio\Elenchi generali stagione.xls", UpdateLinks:=3
    'Sheets("CD").Visible = True
    'Sheets("CD").Select
    Sheets(PrSh).Visible = True
    Sheets(PrSh).Select
    Range("A11:O1100").Select
    'Righe = Selection.Rows.Count + 1
    For C = Righe To 12 Step -1
        If Cells(C, 12).Value = "" Then
            Cells(C, 12).EntireRow.Hidden = True
        End If
    Next
    Range("A1").Select
        ActiveWindow.SelectedSheets.PrintOut From:=1, Copies:=1, Collate:=True
    'Cells.Select
    'Selection.EntireRow.Hidden = False
    'Range("A1").Select
    ActiveWorkbook.Close SaveChanges = False
   
    Application.ScreenUpdating = True

End Sub


Grazie per la pazienza.
Ciao
Cesare
Cesare2010
Utente Junior
 
Post: 30
Iscritto il: 31/01/11 17:37

Re: Stampa di più fogli con un'unica macro

Postdi Anthony47 » 11/03/11 20:19

Hai eliminato la 'Righe = Selection.Rows.Count + 1 ma non hai inserito una Righe=1091. Ergo il ciclo di esame celle vuote si chiude subito.

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

Re: Stampa di più fogli con un'unica macro

Postdi Cesare2010 » 12/03/11 16:27

Buona sera a tutti e, in particolare, un grazie infinito al MAGNIFICO Antony.
Mi scuso per il ritardo. Qualche impegno ed un fastidiosissimo problema di connessione al sito (risolto) mi hanno portato a rispondere solo ora.
I consigli ricevuti in merito all'argomento hanno accresciuto il bagaglio di conoscenza della mia non molta cognizione della programmazione VBA. :D :D :D
La macro funziona benissimo; peraltro mi sono peritato (parola grossa detta da me, neofita!) di apportare piccole modifiche che vanno dall'apertura del file dal quale produrre le stampe alla stringa "Righe=" che dopo un paio di prove ho portato a 1100 perché lasciandola a 1091 nella stampa venivano riprodotte una diecina di righe vuote.
Non so se è corretto postare qui la macro funzionante. Non vogliatemene se fosse diversamente. Eccola:

Codice: Seleziona tutto
Sub StampeVarie()

Application.ScreenUpdating = False
   
    Address = ActiveWorkbook.Path
    File = "Elenchi generali stagione.xls"
    Target = Address + "\" + File
    PrSh = Replace(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text, "STAMPA ", "")
   
    Workbooks.Open Target
   
    Sheets(PrSh).Visible = True
    Sheets(PrSh).Select
    Range("A11:O1100").Select
    Righe = 1100
    For C = Righe To 12 Step -1
        If Cells(C, 12).Value = "" Then
            Cells(C, 12).EntireRow.Hidden = True
        End If
    Next
    Range("A1").Select
       
        ActiveWindow.SelectedSheets.PrintOut From:=1, Copies:=1, Collate:=True
   
    ActiveWorkbook.Close SaveChanges:=False
   
    Application.ScreenUpdating = True

End Sub


Di nuovo grazie ed un a risentirci.

Cesare
Cesare2010
Utente Junior
 
Post: 30
Iscritto il: 31/01/11 17:37

Re: Stampa di più fogli con un'unica macro

Postdi Flash30005 » 13/03/11 00:21

Se la macro è finalmente funzionante hai fatto benissimo a postarla per dare la possibilità ad altri utenti di usufruire del codice "prezioso" per risolvere quesiti simili al tuo

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: Stampa di più fogli con un'unica macro

Postdi Anthony47 » 14/03/11 00:10

E giacche' vuoi imparare allora ti consiglio di non usare come variabili nomi quali Address, File, Target, che sono anche parole chiavi del vba, altrimenti prima o poi qualcosa va in conflitto.

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

Re: Stampa di più fogli con un'unica macro

Postdi Cesare2010 » 14/03/11 08:42

Grazie Flash, grazie Antony.
Sempre puntuali e precisi!
Provvederò a modificare le variabili.
Buona giornata.
Cesare
Cesare2010
Utente Junior
 
Post: 30
Iscritto il: 31/01/11 17:37


Torna a Applicazioni Office Windows


Topic correlati a "Stampa di più fogli con un'unica macro":


Chi c’è in linea

Visitano il forum: Nessuno e 45 ospiti