Stampare solo determinati foglio di un lavoro excel

Anonimo
2011-08-30T21:19:25+00:00

Ho trovato su internet una macro cosi composta:

immaginiamo di avere un foglio il cui nome è Griglia e tre fogli su cui ci sono i dati da stampare "Foglio1", "Foglio2" e "Foglio3":

A fianco di ogni foglio inseriamo un "Si" o un "No" per indicare se il foglio deve essere stampato o meno. Ovviamente i fogli devono essere già formattati per la stampa. Nel file Excel allegato troverete una formula per garantire che il nome dei foglio qui rappresentato sia esatto. Se compare un nome in questo elenco che non corrisponde a un nome del foglio, la  macro si bloccherà con un errore.

La seguente Macro cerca i nomi dei fogli che hanno associato un "Si", li seleziona tutti contempraneamente e li manda in stampa:

Sub Stampa_selettiva()

   Dim i As Integer

   Dim j As Integer

   Dim Fogli As Variant

   Dim GRIGLIA As Worksheet

   Set GRIGLIA = Worksheets("Griglia")

   i = 3

   j = 0

   While GRIGLIA.Cells(i, 3).Value <> ""

       If GRIGLIA.Cells(i, 3).Value = "Si" Then

            If j = 0 Then

                Fogli = Array(GRIGLIA.Cells(i, 2).Value)

            Else

                ReDim Preserve Fogli(j)

                Fogli(j) = GRIGLIA.Cells(i, 2).Value

            End If

             j = j + 1

       End If

       i = i + 1

   Wend

    Sheets(Fogli).Select

    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

    Sheets("GRIGLIA").Select

End Sub

Il mio problema è che i fogli di lavoro sono 45 e non riesco a modificare la macro in modo tale da farmeli leggere tutti e 45.

Grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2011-08-31T17:31:08+00:00

Ciao tutto bene funziona perfettamente. Ho provato a nascondere i fogli per poter mostrare solo il menu principale "GRIGLIA" ma cosi facendo non stampa più i fogli nascosti. Hai qualche consiglio da darmi?

Prova:

Public Sub m()

    Dim sh As Worksheet

    Dim rng As Range

    Dim c As Range

    Set sh = ThisWorkbook.Worksheets("Griglia")

    On Error Resume Next

    Application.ScreenUpdating = False

    With sh

        Set rng = .Range("B3:B47")

        For Each c In rng

            If UCase(c.Offset(0, 1).Value) = "SI" Then

                ThisWorkbook.Worksheets(c.Value).Visible = xlSheetVisible

                ThisWorkbook.Worksheets(c.Value).PrintOut

                ThisWorkbook.Worksheets(c.Value).Visible = xlSheetVeryHidden

            End If

        Next

    End With

    Application.ScreenUpdating = True

    Set rng = Nothing

    Set c = Nothing

    Set sh = Nothing

End Sub

NOTA. La proprietà Visible dei vari fogli è reimpostata dopo la stampa a: xlSheetVeryHidden, cioè i fogli possono essere visualizzati nuovamente *solo* da codice. Se non vuoi questa cosa e vuoi visualizzarli *anche* da Excel, modifica questa riga:

              ThisWorkbook.Worksheets(c.Value).Visible = xlSheetVeryHidden

così:

              ThisWorkbook.Worksheets(c.Value).Visible = xlSheetHidden

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2011-08-31T03:40:23+00:00

Ho trovato su internet una macro cosi composta:

 

immaginiamo di avere un foglio il cui nome è Griglia e tre fogli su cui ci sono i dati da stampare "Foglio1", "Foglio2" e "Foglio3":

 

 

A fianco di ogni foglio inseriamo un "Si" o un "No" per indicare se il foglio deve essere stampato o meno. Ovviamente i fogli devono essere già formattati per la stampa.

<cut>

Grazie

Io non vedo nessun *allegato*. Mettiamo che i nomi dei 45 fogli si trovino sul foglio Griglia, da B3 a B47 e i Sì/No da C3 a C47, prova:

Public Sub m()

    Dim sh As Worksheet

    Dim rng As Range

    Dim c As Range

    Set sh = ThisWorkbook.Worksheets("Griglia")

    On Error Resume Next

    With sh

        Set rng = .Range("B3:B47")

        For Each c In rng

            If UCase(c.Offset(0, 1).Value) = "SI" Then

                ThisWorkbook.Worksheets(c.Value).PrintOut

            End If

        Next

    End With

    Set rng = Nothing

    Set c = Nothing

    Set sh = Nothing

End Sub

NOTA.

Occhio a come è scritto quel sì nella colonna C. Nella macro immagino senza *i* acentata(anche se in italiano vorrebbe accentata), non importa se maiuscolo o miniscolo.

Inoltre questa macro se non trova il foglio o se il suo nome è errato, prosegue e stampa il successivo senza *bloccarsi*.

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-09-01T11:30:22+00:00

    Anche in questo caso mi hai risolto il problema.

    Ora, nella speranza che sia l'ultima cosa, ti volevo chiedere se era possibile nelle impostazioni dei piè di pagina far uscire il numero di pagina del foglio stampato sull'estrema destra in basso. In effetti ora essendo ogni stampa a se stante stampa sempre il numero 1.

    Il nome dei singoli fogli non sono naturalmente più foglio1, foglio2, etc

    ciao

    Hai 45 fogli. Ciascun foglio, immagino, avrà più pagine da stampare. Capisco bene che vuoi un preogressivo da 1 a n stampato in basso a dx nel piè di pagina? Mettendo tu abbia 10 pagine per ogni foglio, da 1 a 450, giusto?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-09-01T10:40:25+00:00

    Anche in questo caso mi hai risolto il problema.

    Ora, nella speranza che sia l'ultima cosa, ti volevo chiedere se era possibile nelle impostazioni dei piè di pagina far uscire il numero di pagina del foglio stampato sull'estrema destra in basso. In effetti ora essendo ogni stampa a se stante stampa sempre il numero 1.

    Il nome dei singoli fogli non sono naturalmente più foglio1, foglio2, etc

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-08-31T13:43:42+00:00

    Ciao tutto bene funziona perfettamente. Ho provato a nascondere i fogli per poter mostrare solo il menu principale "GRIGLIA" ma cosi facendo non stampa più i fogli nascosti. Hai qualche consiglio da darmi?

    La risposta è stata utile?

    0 commenti Nessun commento