Excel - macro per stampa selezioni su più fogli

Anonimo
2019-10-30T09:36:44+00:00

Ho ricevuto questa riposta per la generazione di un'anteprima di sezioni di fogli (in corsivo).

Poi, ho provato ad inserire un'altra selezione, sempre del primo foglio,

Ma mi dice "Variabile SH2" non definita...cosa sbaglio?

Grazie

'=========>>

Option Explicit

'--------->>

Public Sub Tester()

Dim WB As Workbook

Dim SH As Worksheet, SH2 As Worksheet

Dim rng_Stampa As Range, rng2_Stampa As Range

Dim LRow As Long

Dim CalcMode As Long

Const sFoglio As String = "Foglio1"                           '<<=== Modifica

Const sFoglio2 As String = "Foglio2"                          '<<=== Modifica

Const sIntervallo_Stampa As String = "A1:M36" '<<=== Modifica

Const sIntervallo2_Stampa As String = "B5:N22"'<<=== Modifica

Set WB = ThisWorkbook

With WB

Set SH = .Sheets(sFoglio)

Set SH2 = .Sheets(sFoglio2)

SH.PageSetup.PrintArea = sIntervallo_Stampa

SH2.PageSetup.PrintArea = sIntervallo2_Stampa

.Worksheets(Array(sFoglio, sFoglio2)).PrintPreview  'Out

End With

End Sub

'<<=========

VARIAZIONE PER TERZA SELEZIONE

'=========>>

Option Explicit

'--------->>

Public Sub Tester()

    Dim WB As Workbook

    Dim SH As Worksheet, SH3 As Worksheet

    Dim rng_Stampa As Range, rng3_Stampa As Range

    Dim LRow As Long

    Dim CalcMode As Long

    Const sFoglio As String = "SINTESI"

    Const sFoglio2 As String = "BUDGET"

    Const SFoglio3 As String = "SINTESI"

    Const sIntervallo_Stampa As String = "A1:M15"

    Const sIntervallo2_Stampa As String = "A1:M30"

    Const sIntervallo3_Stampa As String = "C4:F18"

    Set WB = ThisWorkbook

    With WB

        Set SH = .Sheets(sFoglio)

        Set SH2 = .Sheets(sFoglio2)

        Set SH3 = .Sheets(SFoglio3)

        SH.PageSetup.PrintArea = sIntervallo_Stampa

        SH2.PageSetup.PrintArea = sIntervallo2_Stampa

        SH3.PageSetup.PrintArea = sIntervallo3_Stampa

        .Worksheets(Array(sFoglio, sFoglio2, SFoglio3)).PrintPreview  'Out

    End With

End Sub

'<<=========

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

2 risposte

Ordina per: Più utili
  1. Anonimo
    2019-10-30T11:49:34+00:00

    Ciao,

    non era mia intenzione convertire il codice...solo che, da profano, ho tentato di aggiungere un'altra sezione.

    Il primo codice che mi hai inviato funziona benissimo, anche perché mi fa l'anteprima di stampa.

    Ho bisogno però di poter inserire altre sezioni nella stampa, mano a mano che aggiorno i miei lavori, e tenendo l'ordine delle sezioni. Quindi la terza sezione che ho "tentato" di inserire fa parte sempre del foglio "SINTESI".

    Se utilizzo l'ultimo codice che mi hai inviato mi stampa la sezione definita nel "BUDGET". In più non apre l'anteprima, ma stampa direttamente.

    Se potessi indicarmi quali campi devo inserire per ulteriore selezioni….

    Grazie tante ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-10-30T10:44:10+00:00

    Ho ricevuto questa riposta per la generazione di un'anteprima di sezioni di fogli (in corsivo).

    Poi, ho provato ad inserire un'altra selezione, sempre del primo foglio,

    Ma mi dice "Variabile SH2" non definita...cosa sbaglio?

    Grazie

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

    Dim WB As Workbook

    Dim SH As Worksheet, SH2 As Worksheet

    Dim rng_Stampa As Range, rng2_Stampa As Range

    Dim LRow As Long

    Dim CalcMode As Long

    Const sFoglio As String = "Foglio1"                           '<<=== Modifica

    Const sFoglio2 As String = "Foglio2"                          '<<=== Modifica

    Const sIntervallo_Stampa As String = "A1:M36"'<<=== Modifica

    Const sIntervallo2_Stampa As String = "B5:N22"'<<=== Modifica

    Set WB = ThisWorkbook

    With WB

    Set SH = .Sheets(sFoglio)

    Set SH2 = .Sheets(sFoglio2)

    SH.PageSetup.PrintArea = sIntervallo_Stampa

    SH2.PageSetup.PrintArea = sIntervallo2_Stampa

    .Worksheets(Array(sFoglio, sFoglio2)).PrintPreview  'Out

    End With

    End Sub

    '<<=========

    VARIAZIONE PER TERZA SELEZIONE

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet, SH3 As Worksheet

        Dim rng_Stampa As Range, rng3_Stampa As Range

        Dim LRow As Long

        Dim CalcMode As Long

        Const sFoglio As String = "SINTESI"

        Const sFoglio2 As String = "BUDGET"

        Const SFoglio3 As String = "SINTESI"

        Const sIntervallo_Stampa As String = "A1:M15"

        Const sIntervallo2_Stampa As String = "A1:M30"

        Const sIntervallo3_Stampa As String = "C4:F18"

        Set WB = ThisWorkbook

        With WB

            Set SH = .Sheets(sFoglio)

            Set SH2 = .Sheets(sFoglio2)

            Set SH3 = .Sheets(SFoglio3)

            SH.PageSetup.PrintArea = sIntervallo_Stampa

            SH2.PageSetup.PrintArea = sIntervallo2_Stampa

            SH3.PageSetup.PrintArea = sIntervallo3_Stampa

            .Worksheets(Array(sFoglio, sFoglio2, SFoglio3)).PrintPreview  'Out

        End With

    End Sub

    '<<=========

    Il tuo problema immediato è dovuto al fatto che non hai dimensionato la variabile SH2. Quindi, sostituisci

        Dim SH As Worksheet, SH3 As Worksheet

    con:

         Dim SH As Worksheet, SH2 as Worksheet, SH3 As Worksheet

    Ancora più importante, tuttavia, hai tentato di convertire il mio codice, che stampa un singolo intervallo su più fogli, per stampare più intervalli su più fogli. Il tuo adattamento non raggiungerà questo obiettivo. Supponendo che la situazione reale non sia sostanzialmente più complessa di quanto indicato, prova invece la seguente versione del mio codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet, SH2 As Worksheet

        Dim rng_Stampa As Range, rng3_Stampa As Range

        Dim LRow As Long

        Dim CalcMode As Long

        Const sFoglio As String = "SINTESI"

        Const sFoglio2 As String = "BUDGET"

        Const sIntervallo_Stampa As String = "A1:M15"

        Const sIntervallo2_Stampa As String = "A1:M30"

        Const sIntervallo3_Stampa As String = "C4:F18"

        Set WB = ThisWorkbook

        With WB

            Set SH = .Sheets(sFoglio)

            Set SH2 = .Sheets(sFoglio2)

            SH.PageSetup.PrintArea = sIntervallo_Stampa

            SH2.PageSetup.PrintArea = sIntervallo2_Stampa

            .Worksheets(Array(sFoglio, sFoglio2)).PrintOut

            With SH2

                   .PageSetup.PrintArea = sIntervallo3_Stampa

                   .PrintOut

                   .Select

            End With        

        End With

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento