Condividi tramite

area di stampa con parametri variabili

Anonimo
2015-07-02T14:42:41+00:00

buonasera a tutti,

ho necessità di impostare l'area di stampa di alcuni fogli excel, con delle variabili al posto dei numeri prefissati, in quanto sia le righe che le colonne da stampare possono essere di volta in volta diverse.

per il seguente passo:   ActiveSheet.PageSetup.PrintArea = "A1:M3"   ho tentato di sostituire l'area definita "A1:M3" con delle variabili che mi sono calcolato su quante righe e colonne avevo bisogno di stampare. Il tutto senza successo con degli errori di ritorno.

Avete qualche soluzione che possa fare al caso mio ?

Ringrazio e saluto.

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

3 risposte

Ordina per: Più utili
  1. Anonimo
    2015-07-02T14:58:11+00:00

    Ciao andyfas,

    Prova qualcosa del genere:

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

    Option Explicit

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

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Dim LRow As Long

        Set WB = ThisWorkbook                           

        Set SH = WB.Sheets("Foglio1")                         '<<==== Modifica

        With SH

            LRow = LastRow(SH, .Columns("A:A"))

            Set Rng = .Range("A1:M" & LRow)

        End With

        SH.PageSetup.PrintArea = Rng.Address

    End Sub

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

    Public Function LastRow(SH As Worksheet, _

                     Optional Rng As Range)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

    End Function

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

    Se dovresti comunque avere un problema, spiega come l'area di stampa deve essere determinata e posterò una revisione del codice.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2015-07-03T13:21:39+00:00

    Ciao AndyFas,

    Il mio codice è stato inteso come un esempio generico dell'uso di variabili per impostare l'intervallo di stampa di un foglio specifico.

    Comunque, per impostare l'intervallo di stampa per tutti i fogli che siano popolati e adattare tali intervalli di stampa alla zona di dati dei singoli fogli, prova invece qualcosa del genere:

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

    Option Explicit

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

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Dim LRow As Long, LCol As Long

        Set WB = ThisWorkbook

        For Each SH In WB.Worksheets

            With SH

                LRow = LastRow(SH)

                LCol = LastCol(SH)

                If CBool(LRow) Then

                    Set Rng = .Range("A1").Resize(LRow, LCol)

                    SH.PageSetup.PrintArea = Rng.Address

                End If

            End With

        Next SH

    End Sub

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

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

    End Function

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

    Public Function LastCol(SH As Worksheet, _

                            Optional Rng As Range)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastCol = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByColumns, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Column

        On Error GoTo 0

    End Function

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

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-07-03T12:57:24+00:00

    Ciao Norman,

    ti ringrazio per la soluzione che proverò lunedì al mio rientro in ufficio. Dando un'occhiata veloce al codice ti chiedo soltanto una conferma:

    La soluzione proposta è attuabile per qualsiasi ampiezza delle colonne da impostare come area di stampa, oppure la colonna "M" è fissa ? In quest'ultimo caso non andrebbe bene in quanto è variabile anche questo parametro oltre che quello delle righe.

    Ciao e buon WE.

    La risposta è stata utile?

    0 commenti Nessun commento