Macro per esportare pdf da excel

Anonimo
2020-12-22T15:15:13+00:00

Salve. Sto provando a strutturare una macro per stampare in maniera batch i pdf.

Il foglio che ho predisposto funziona in questo modo.

Ho messo una cella con una serie di valori (in forma tabellare su un'area del foglio) selezionabili con la "convalida dati" (gruppo di clienti) e selezionando il cliente desiderato tutti i campi dei valori del foglio mi si aggiornano correttamente.

Per esportare in pdf il foglio ho trovato questa macro che funziona correttamente (il nome del cliente viene preso dalla cella "J10").

Purtroppo l'appetito vien mangiando e mi si chiede di poter stampare anche in batch tutti i clienti.

Praticamente devo inserire un ciclo che selezioni il cliente dalla tabella, aggiorni il foglio (F9), e esporta il pdf.

Il problema è che non mi è mai capitato fare un ciclo su un'area di un foglio.

Come posso fare?

Grazie........

Option Explicit

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

Public Sub exp_pdf_ORD()

    Dim WB As Workbook

    Dim srcSH As Worksheet, nameSH As Worksheet

    Dim rngNome As Range

    Dim sPath As String, sSuffisso As String, sFilename As String

    Const sPrefisso As String = "LIC_ORD_"

    Const sFoglioSorgente As String = "STA_ORD"

    Const sFoglioNome As String = "INS_ORD"

    Const sCellaNome As String = "J10"

    Const sEstensione As String = ".pdf"

    Set WB = ThisWorkbook

    With WB

        sPath = .Path & ""

        Set srcSH = .Sheets(sFoglioSorgente)

        Set nameSH = .Sheets(sFoglioNome)

        Set rngNome = nameSH.Range(sCellaNome)

        sSuffisso = Format(rngNome.Value, "yyyy-mm-dd")

        sFilename = sPath & sPrefisso & sSuffisso & sEstensione

        srcSH.ExportAsFixedFormat Type:=xlTypePDF, _

                                  Filename:=sFilename, _

                                  Quality:=xlQualityStandard, _

                                  IncludeDocProperties:=True, _

                                  IgnorePrintAreas:=False, _

                                  OpenAfterPublish:=False

        .Close SaveChanges:=False

    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
    2020-12-23T16:00:33+00:00

    Grazie, ho già risolto. In pratica ho fatto un ciclo for next sulle celle con la lista dei nomi facendo memorizzare ogni volta il valore della cella; dopo con una macro torno sul foglio principale e copio il valore memorizzato nella cella dove c'è la convalida dati; faccio fare il ricalcolo (F9) e lancio la macro di esportazione del pdf. Chiaramente nella macro principale (quella con il ciclo for next) vengono richiamate le altre due macro in modo che tutto funzioni da sé........

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-12-22T15:59:44+00:00

    Ciao tos58,

    Sto provando a strutturare una macro per stampare in maniera batch i pdf.

    Il foglio che ho predisposto funziona in questo modo.

    Ho messo una cella con una serie di valori (in forma tabellare su un'area del foglio) selezionabili con la "convalida dati" (gruppo di clienti) e selezionando il cliente desiderato tutti i campi dei valori del foglio mi si aggiornano correttamente.

    Per esportare in pdf il foglio ho trovato questa macro che funziona correttamente (il nome del cliente viene preso dalla cella "J10").

    Purtroppo l'appetito vien mangiando e mi si chiede di poter stampare anche in batch tutti i clienti.

    Praticamente devo inserire un ciclo che selezioni il cliente dalla tabella, aggiorni il foglio (F9), e esporta il pdf.

    Il problema è che non mi è mai capitato fare un ciclo su un'area di un foglio.

    Come posso fare?

    Grazie........

    Option Explicit

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

    Public Sub exp_pdf_ORD()

        Dim WB As Workbook

        Dim srcSH As Worksheet, nameSH As Worksheet

        Dim rngNome As Range

        Dim sPath As String, sSuffisso As String, sFilename As String

        Const sPrefisso As String = "LIC_ORD_"

        Const sFoglioSorgente As String = "STA_ORD"

        Const sFoglioNome As String = "INS_ORD"

        Const sCellaNome As String = "J10"

        Const sEstensione As String = ".pdf"

        Set WB = ThisWorkbook

        With WB

            sPath = .Path & ""

            Set srcSH = .Sheets(sFoglioSorgente)

            Set nameSH = .Sheets(sFoglioNome)

            Set rngNome = nameSH.Range(sCellaNome)

            sSuffisso = Format(rngNome.Value, "yyyy-mm-dd")

            sFilename = sPath & sPrefisso & sSuffisso & sEstensione

            srcSH.ExportAsFixedFormat Type:=xlTypePDF, _

                                      Filename:=sFilename, _

                                      Quality:=xlQualityStandard, _

                                      IncludeDocProperties:=True, _

                                      IgnorePrintAreas:=False, _

                                      OpenAfterPublish:=False

            .Close SaveChanges:=False

        End With

    End Sub

    La convalida dei dati nella cella J10 è stata creata con un elenco manuale o si riferisce a un elenco inserito in un intervallo di celle?

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento