Condividi tramite

[Risolto]Seleziona e stampa in pdf vba

Anonimo
2018-05-26T10:04:41+00:00

Buongiorno a tutti, ho creato una macro funzionante che mi salva in PDF un foglio di lavoro.

Vorrei che mi si impostasse la selezione dalla data futura più vicina a quella odierna.

Nella colonna B ci sono diverse date, la selezione dovrebbe partire da quella più vicina alla data odierna e terminare all'ultima riga, in seguito salvare il tutto (Colonne A,B,C e D) in Pdf.

la macro è questa:

Sub Pensioni_in_PDF()

Ultimariga = Cells(Rows.Count, "A").End(xlUp).Row

    Sheets("DB").Range("A2:C" & Ultimariga).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _

        "C:\Users\Pensioni Animali.pdf", Quality:=xlQualityStandard, _

        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _

        False

End Sub

A proposito, come faccio per inserire un file?

Ringrazio in anticipo

Ringo

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

9 risposte

Ordina per: Più utili
  1. Anonimo
    2018-05-27T01:23:30+00:00

    Ciao Ringo,

    Grazie mille, se ho fatto giusto allora, qui dovrebbe trovarsi il file

    https://www.dropbox.com/s/ho7nrjko1f3d0nh/Indirizzario%20da%20usare%2029.3.18.xlsm?dl=0

    Ok file caricato in maniera corretta.

    Unica precisazione, ho visto che le date sono in formato diverso da come le uso il, il mio file ha le date "dddd, dd. mmmm yyyy".

    Ho scaricato il tuo file.

    Innanzitutto, nota che il tuo codice dovrrebbe trovarsi in un modulo di codice standard anzichè nel modulo di codice del foglio.

    Per approfondire la questione del posizionamento di codice, ti consiglio l'articolo wiki di Fratello Mauro:

    Excel - Dove e come inserire il codice Visual Basic - VBA (Update)

    Quindi, cancella il tuo codice esistenti e prova invece qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IMper inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

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

    Option Explicit

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

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet, newSH As Worksheet

        Dim Rng As Range, Rng2 As Range, rCell As Range

        Dim i As Long, LRow As Long

        Dim CalcMode As Long

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

        Const sColonnaDate As String = "B"                               '<<=== Modifica

        Const sColonneDaStampare As String = "A:D"                '<<=== Modifica

        Const sPercorso As String = _

           "C:\Users\Ringo\Documents\Pensioni Animali.pdf"   '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        SH.Copy

        Set newSH = ActiveSheet

        With Application

            CalcMode = .Calculation

            .Calculation = xlCalculationManual

            .ScreenUpdating = False

        End With

        With newSH

            LRow = LastRow(SH, .Columns(sColonnaDate))

            Set Rng = Intersect(.Rows(1).Resize(LRow), _

                                .Columns(sColonneDaStampare))

            For i = 2 To LRow

                If .Cells(i, "B").Value >= Date Then

                    .Rows(2).Resize(i - 2).Delete

                    Exit For

                End If

            Next i

        End With

        Rng.Select

        Rng.ExportAsFixedFormat _

                Type:=xlTypePDF, _

                Filename:=sPercorso _

                          , Quality:=xlQualityStandard, _

                          IncludeDocProperties:=True, _

                          IgnorePrintAreas:=False, _

                          OpenAfterPublish:=False

        ActiveWorkbook.Close SaveChanges:=False

    XIT:

        With Application

            .Calculation = CalcMode

            .ScreenUpdating = True

        End With

    End Sub

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

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1, _

                            Optional sPassword As String)

        Dim bProtected As Boolean

        With SH

            If Rng Is Nothing Then

                Set Rng = .Cells

            End If

            bProtected = .ProtectContents = True

            If bProtected Then

                .Unprotect Password:=sPassword

            End If

        End With

        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

        If LastRow < minRow Then

            LastRow = minRow

        End If

        If bProtected Then

            SH.Protect Password:=sPassword, _

                       UserInterfaceOnly:=True

        End If

    End Function

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

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester
    • Esegui

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-05-26T15:33:31+00:00

    Grazie mille, se ho fatto giusto allora, qui dovrebbe trovarsi il file

    https://www.dropbox.com/s/ho7nrjko1f3d0nh/Indirizzario%20da%20usare%2029.3.18.xlsm?dl=0

    Ok file caricato in maniera corretta.

    Unica precisazione, ho visto che le date sono in formato diverso da come le uso il, il mio file ha le date "dddd, dd. mmmm yyyy".

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-05-26T13:15:02+00:00

    Ciao Ringo,

    le date sono in ordine crescente

    Bene!

    e le righe hanno una intestazione.

    OK. 

    Per la seconda domanda, era inteso come potevo inserire il file d'esempio in modo che poteste vedere il tutto, come lo avevo fatto.

    Bene, ora capisco! -:)

    Per caricare il file su DropBox, vedi:

    https://www.dropbox.com/it/help/topics/sharing_files_and_folders

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-05-26T12:30:52+00:00

    ciao Norman, le date sono in ordine crescente e le righe hanno una intestazione.

    Per la seconda domanda, era inteso come potevo inserire il file d'esempio in modo che poteste vedere il tutto, come lo avevo fatto.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2018-05-26T11:04:53+00:00

    Ciao Ringo,

    ho creato una macro funzionante che mi salva in PDF un foglio di lavoro.

    Vorrei che mi si impostasse la selezione dalla data futura più vicina a quella odierna.

    Nella colonna B ci sono diverse date, la selezione dovrebbe partire da quella più vicina alla data odierna e terminare all'ultima riga, in seguito salvare il tutto (Colonne A,B,C e D) in Pdf.

    [...]

    • Le date nel foglio DB sono ordinate in ordine crescente o casuale?
    • I dati hanno una riga di intestazione e questa intestazione dovrebbe essere inclusa nel nuovo file pdf?

    A proposito, come faccio per inserire un file?

    • Che tipo di file?
    • Dove si lo trova?
    • Dove essere inserito?
    • Quando?
    • Perché o in risposta a quale azione?

    Se questa tua seconda domanda fosse indipendente da quella iniziale, ti chiederei gentilmente di aprire un nuovo thread dedicato.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento