Condividi tramite

Macro per stampare in PDF con area di stampa automatica

Anonimo
2015-03-10T10:16:26+00:00

Buongiorno a Tutti

Mi scuso se apparirò assai inesperto. Questo è il mio primo post in assoluto.

Utilizzo Excel 2007. Ho la necessità di creare una macro che permetta, tramite un pulsante presente ad esempio nel foglio 1, di salvare o stampare in pdf, il contenuto del foglio 2.

Il contenuto di questo foglio (2) è variabile, e può essere costituito da 1, 2, 3 o 4 pagine che con delle formule, ricevono i dati da altri fogli. In una casella del foglio 2 è indicato in automatico quante sono le pagine da stampare.

Avrei bisogno in definitiva di una macro che stampi in PDF solo le pagine (intervallo A1; J159) indicate nella casella K1 del foglio 2 e non tutte le pagine.

Vi sarei tanto grato se poteste aiutarmi

Grazie e cordiali saluti

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

  1. Anonimo
    2015-03-11T14:01:58+00:00

    Ciao Sebastiano Di Paola,

    son contento! E grazie a te del cortese riscontro. Ricordati, se vuoi, di segnare Risposta, in modo che si possa chiudere positivamente il thread, anche a favore di chi ci leggerà.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-03-11T10:08:42+00:00

    Gent.mo Maurizio

    Funziona alla grande!!! e senza la necessità di cambiare le impostazioni (ho solo aggiunto qualche riga trq le pagine. 

    Quanto vorrei saper programmare (un pochino) in VBA! vedere apparire il file PDF, mi è parso come qualcosa di magico.

    Ti sono veramente grato.

    Grazie 1000 !!!

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-03-10T18:03:26+00:00

    Ciao Sebastiano Di Paola,

    quel codice va copiato nel Modulo Visual Basic del Foglio di lavoronel quale esiste un *Pulsante di comando (Controllo ActiveX)*di nome cmdStampaPDF.

    Se il pulsante non si chiama così, rinominalo. Oppure rinomina la routine. Metti che il pulsante si chiami CommandButton21 la sua routine invece che:

    Private Sub cmdStampaPDF_Click()

    si chiamerà:

    Private Sub CommandButton21_Click()

    (Anche se preferisco il nome più significativo.)

    Quindi la procedura sarà, a partire dal Foglio di lavoro in cui hai piazzato il pulsante Pulsante di comando (Controllo ActiveX):

    1. ALT+F11
    2. CTRL+R
    3. Foglio1 (Foglio1)
    4. F7
    5. Incolla il codice.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-03-10T13:21:47+00:00

    Grazie Maurizio

    Gentilissimo.

    Ho però un problema. Ho copiato il tuo lavoro in un modulo vba, ma quando lo salvo non appare la macro da richiamare con il pulsante.

    (ho modificato i dati da Te indicati.)

    Sarà certamente una banalità, ma io sono un neofita e non riesco a venirne a capo. 

    Potresti darmi qualche consiglio?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-03-10T10:58:19+00:00

    Ciao Sebastiano Di Paola,

    un modo:

    ' Nel modulo Visual Basic del Foglio di lavoro in cui è presente

    ' il Pulsante di comando di nome "cmdStampaPDF"

    '

    Option Explicit

    ' La routine evento del pulsante "cmdStampaPDF"

    '

    Private Sub cmdStampaPDF_Click()

    ' Il percorso e il nome con cui verrà salvato il file PDF:

    Const cstrPathFilePdf = "D:\Percorso\Nome.pdf" ' <-- Modificare!

    ' Il nome del Foglio di lavoro da stampare:

    Const cstrFoglio = "Foglio2"                   ' <-- Modificare!

    ' La cella in cui c'è il numero di pagine da stampare:

    Const cstrPagg = "K1"                          ' <-- Modificare!

    ' La cella in cui ci sono le coordinate dell'area di stampa.

    ' Per esempio, in Foglio2, cella K2, ho immesso: A1:J159

    Const cstrArea = "K2"                          ' <-- Modificare!

    Dim wsh     As Excel.Worksheet

    Dim strArea As String

    Dim lngPagg As Long

        Set wsh = ThisWorkbook.Worksheets.Item(cstrFoglio)

        lngPagg = wsh.Range(cstrPagg).Value

        Debug.Print lngPagg

        strArea = wsh.Range(cstrArea).Value

        Debug.Print strArea

        With wsh

          ' Impostazioni di stampa da cambiare in base alle necessità.

          ' La cosa migliore da fare è registrare una macro poi copiare

          ' da quella i valori.

          With .PageSetup

            .PrintTitleRows = ""

            .PrintTitleColumns = ""

            .PrintArea = strArea

            .LeftHeader = "&""-,Grassetto"" Confidenziale"

            .CenterHeader = ""

            .RightHeader = "&D"

            .LeftFooter = ""

            .CenterFooter = ""

            .RightFooter = "Pagina &P di &N"

            .LeftMargin = Application.InchesToPoints(0.393700787401575)

            .RightMargin = Application.InchesToPoints(0.393700787401575)

            .TopMargin = Application.InchesToPoints(0.393700787401575)

            .BottomMargin = Application.InchesToPoints(0.393700787401575)

            .HeaderMargin = Application.InchesToPoints(0.31496062992126)

            .FooterMargin = Application.InchesToPoints(0.31496062992126)

            .PrintHeadings = False

            .PrintGridlines = False

            .PrintComments = xlPrintNoComments

            .PrintQuality = -3

            .CenterHorizontally = True

            .CenterVertically = False

            .Orientation = xlPortrait

            .Draft = False

            .PaperSize = xlPaperA4

            .FirstPageNumber = xlAutomatic

            .Order = xlDownThenOver

            .BlackAndWhite = False

            .Zoom = False

            .FitToPagesWide = 1

            .FitToPagesTall = 999

            .PrintErrors = xlPrintErrorsDisplayed

            .OddAndEvenPagesHeaderFooter = False

            .DifferentFirstPageHeaderFooter = False

            .ScaleWithDocHeaderFooter = True

            .AlignMarginsHeaderFooter = True

            .EvenPage.LeftHeader.Text = ""

            .EvenPage.CenterHeader.Text = ""

            .EvenPage.RightHeader.Text = ""

            .EvenPage.LeftFooter.Text = ""

            .EvenPage.CenterFooter.Text = ""

            .EvenPage.RightFooter.Text = ""

            .FirstPage.LeftHeader.Text = ""

            .FirstPage.CenterHeader.Text = ""

            .FirstPage.RightHeader.Text = ""

            .FirstPage.LeftFooter.Text = ""

            .FirstPage.CenterFooter.Text = ""

            .FirstPage.RightFooter.Text = ""

          End With

          .ExportAsFixedFormat Type:=xlTypePDF _

                              , Filename:=cstrPathFilePdf _

                              , Quality:=xlQualityStandard _

                              , IncludeDocProperties:=True _

                              , IgnorePrintAreas:=False _

                              , From:=1 _

                              , To:=lngPagg _

                              , OpenAfterPublish:=True

        End With

        Set wsh = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento