Converti Excel in PDF usando VBA: l'unica guida di cui avrai bisogno

*Questo è un guest post di Ryan Wells, un collega blogger e un brillante sviluppatore VBA.*

Se lavori con Excel, senza dubbio ti è stato chiesto di creare riepiloghi del tuo lavoro.

Rapporti di vendita, fatture, previsioni, pianificazioni, lo chiami.

Sai cosa hanno in comune tutti questi documenti? Sembrano fantastici in formato PDF. Sai cos'altro? La direzione ama i PDF!

Converti Excel in PDF

In questo tutorial, ti mostrerò come utilizzare Excel VBA per convertire tutti i tipi di oggetti Excel in PDF:

Presenterò ciascuna delle macro con alcuni commenti. In questo modo, sarai in grado di trovarli rapidamente, copiarli nel tuo editor VBA e usarli.

Quando esegui una di queste macro, verrà visualizzata una finestra di dialogo Salva con nome che ti chiederà dove desideri salvare il PDF. Il nome predefinito include la data e il timestamp quando è stata eseguita la macro nel formato aaaammgg_hhmmss.

Andiamo subito al dunque.

Ecco le macro:

Stampa la selezione in PDF

Questo è il mio preferito. Questa macro convertirà le celle che hai selezionato attivamente in un PDF.

Se hai solo una cella selezionata, la macro VBA è abbastanza intelligente da capire che probabilmente non vuoi convertire solo una cella, quindi ti chiede di selezionare l'intervallo che vuoi convertire:

Sub PrintSelectionToPDF() 'SUBROUTINE: PrintSelectionToPDF 'SVILUPPATORE: Ryan Wells 'DESCRIPTION: Stampa l'intervallo attualmente selezionato su un PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Then Set ThisRng = Application.InputBox( "Seleziona un intervallo", "Ottieni intervallo", Tipo:=8) Else Set ThisRng = Selection End If 'Chiedi di salvare la posizione strfile = "Selection" & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="File PDF (*.pdf), *.pdf", _ Title:= "Seleziona cartella e nome file da salvare come PDF") If myfile "False" Then 'save as PDF ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:= False, OpenAfterPublish:=True Else MsgBox "Nessun file selezionato. Il PDF non verrà salvato", vbOKOnly, "Nessun file selezionato" End If End Sub

Una volta selezionato l'intervallo e fatto clic su OK, verrà visualizzata una finestra di dialogo in cui è possibile selezionare dove si desidera salvare il PDF.

Preleverà automaticamente la data e l'ora dall'orologio del tuo sistema e la aggiungerà al nome del file.

Stampa una tabella in PDF

Molti utenti esperti di Excel archiviano i propri dati in tabelle organizzate. In effetti, allo stesso Sumit Bansal piacciono così tanto le tabelle di Excel che le chiama un tesoro nascosto in Excel.

Questa macro stampa una tabella di tua scelta in un PDF. Quando esegui la macro, ti verrà chiesto il nome della tabella che desideri salvare.

Sub PrintTableToPDF() 'SUBROUTINE: PrintTableToPDF 'SVILUPPATORE: Ryan Wells 'DESCRIPTION: Stampa una tabella a tua scelta in un PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False 'Enter the table name che vuoi salvare strTable = InputBox("Qual è il nome della tabella che vuoi salvare?", "Enter Table Name") 'Tabella che vuoi salvare If Trim(strTable) = "" Then Exit Sub 'Chiedi di salvare location strfile = strTable & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="File PDF (*.pdf), *.pdf", _ Title:="Seleziona cartella e nome file da salvare come PDF") If myfile "False" Then 'save as PDF Range(strTable).ExportAsFixedFormat Type :=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Nessun file selezionato. Il PDF non sarà salvato", vbOKOnly, "Nessun file selezionato" End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Una volta inserito il nome della tabella e fatto clic su OK, verrà visualizzata una finestra di dialogo in cui è possibile selezionare dove si desidera salvare il PDF.

Preleverà automaticamente la data e l'ora dall'orologio del tuo sistema e la aggiungerà al nome del file.

Stampa tutte le tabelle per separare i PDF

Se il tuo foglio di calcolo ha più tabelle e devi salvarle ognuna in un PDF separato, puoi eseguire questo codice VBA.

Quando esegui questa macro, apparirà una finestra di dialogo che ti chiederà di selezionare la cartella in cui vuoi salvare i tuoi PDF.

Una volta scelta la cartella, la macro salverà ogni tabella in un PDF con il nome della tabella che appare comodamente nel titolo del PDF.

Sub PrintAllTablesToPDFs() 'SUBROUTINE: PrintAllTablesToPDFs 'SVILUPPATORE: Ryan Wells 'DESCRIPTION: Stampa ogni tabella del foglio di calcolo in un PDF diverso Dim strTables() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Dove vuoi salvare il tuo PDF?" .ButtonName = "Salva qui" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then ' se si preme OK sfolder = .SelectedItems(1) Else End If End With For Each sht In ThisWorkbook.Worksheets For Each tbl In sht .ListObjects miofile = ThisWorkbook.Name & "" & tbl.Nome & "" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" myfile = sfolder & "\" & myfile sht.Range(tbl.Name).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality :=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Next tbl Next sht End Sub

Stampa tutti i fogli in un unico PDF

Non so voi, ma nel mio lavoro dobbiamo conservare copie PDF di quasi tutti i nostri fogli di calcolo. Alleghiamo le copie PDF dei nostri fogli di calcolo ai nostri calcoli di progettazione. Questi PDF venivano convertiti in microfiche e archiviati per la conservazione a lungo termine. Sai, nel caso fosse accaduta l'apocalisse.

Se ti trovi in ​​una situazione simile, è bello poter convertire automaticamente tutti i fogli del tuo foglio di calcolo in un PDF. Ecco una macro VBA che farà proprio questo:

Sub PrintAllSheetsToPDF() 'SUBROUTINE: PrintAllSheetsToPDF 'SVILUPPATORE: Ryan Wells 'DESCRIPTION: Combina tutti i tuoi fogli di lavoro in un PDF Dim strSheets() As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant 'Salva i nomi dei fogli grafici a un array per ogni sh in ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Preserve strSheets(icount) strSheets(icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Then 'Nessun grafico trovato. Errore di punzonatura MsgBox "Impossibile creare un PDF perché non sono stati trovati fogli.", , "Nessun foglio trovato" Esci da Sub End If 'Chiedi la posizione di salvataggio strfile = "Fogli" & "_" _ & Format(Now(), " yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="File PDF (*.pdf), *.pdf", _ Title:="Select Folder and File Name to Save as PDF") If myfile "False" Then 'salva as PDF ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality: =xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Nessun file selezionato. Il PDF non verrà salvato", vbOKOnly, "Nessun file selezionato" End If End Sub

Stampa fogli grafici in PDF

Questa macro converte tutti i tuoi fogli grafici in un unico PDF, ma non i tuoi oggetti grafici! Per fogli grafici, intendo i grafici che hanno la propria scheda nell'elenco delle schede del foglio di calcolo:

Sub PrintChartSheetsToPDF() 'SUBROUTINE: PrintChartSheetsToPDF 'SVILUPPATORE: Ryan Wells 'DESCRIPTION: Combina tutti i fogli grafici in un PDF Dim strSheets() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant ' Salva i nomi del foglio grafico in una matrice per ogni ch In ActiveWorkbook.Charts ReDim Mantieni strSheets(icount) strSheets(icount) = ch.Name icount = icount + 1 ch successivo Se icount = 0 Allora 'Nessun grafico trovato. Errore di punzonatura MsgBox "Impossibile creare un PDF perché non è stato trovato alcun foglio grafico.", , "Nessun foglio grafico trovato" Esci da Sub-End If 'Richiedi posizione di salvataggio strfile = "Grafici" & "_" _ & Format(Now() , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="File PDF (*.pdf), *.pdf ", _ Title:="Seleziona cartella e nome file da salvare come PDF") If myfile "False" Then 'save as PDF ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Nessun file selezionato. Il PDF non verrà salvato", vbOKOnly, "Nessun file selezionato" End If End Sub

Stampa oggetti grafici in PDF

Questa macro salva tutti i tuoi normali grafici - oggetti grafici - in un unico PDF. Indipendentemente dal foglio di lavoro in cui si trova il tuo grafico, verrà acquisito e salvato in un PDF.

Ci sarà solo un grafico per pagina nel PDF finale.

Sub PrintChartsObjectsToPDF() 'SUBROUTINE: PrintChartsObjectsToPDF 'SVILUPPATORE: Ryan Wells 'DESCRIZIONE: Combina tutti gli oggetti grafici in un PDF Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim myfile As Variant Application.Screen = False Imposta wsTemp = Sheets.Add tp = 10 Con wsTemp per ogni ws in ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Quindi vai a nextws: per ogni chrt in ws.ChartObjects chrt.Copy wsTemp.Range("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row > 1 Then ActiveSheet.Rows(Selection.TopLeftCell.Row).PageBreak = xlPageBreakManual End If tp = tp + Selection.Height + 50 Next nextws: Next ws Termina con 'Richiedi posizione di salvataggio strfile = "Grafici" & "_" _ & Format(Now(), "yyyymmdd\_hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="File PDF (*.pdf), *.pdf", _ Title:="Select Fol der e File Name to Save as PDF") If myfile False Then 'save as PDF wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= True 'Else' MsgBox "Nessun file selezionato. Il PDF non verrà salvato", vbOKOnly, "Nessun file selezionato" End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Se hai domande, scrivile nella sezione commenti, dove io e Ryan ti aspetteremo lì.

Potrebbero piacerti anche i seguenti tutorial di Excel:

  • Come incorporare un file PDF in un foglio di lavoro Excel.
  • Cicli VBA di Excel: For Next, Do While, Do Until, For Each (con esempi).
  • Come registrare una macro in Excel
  • Come combinare più cartelle di lavoro in una cartella di lavoro di Excel
  • Come eseguire una macro in Excel.
  • Come creare e utilizzare un componente aggiuntivo di Excel.
  • Gestione degli errori VBA di Excel
  • Dividi ogni foglio Excel in file separati
  • Come importare file XML in Excel | Converti XML in Excel

Circa l'autore: Ryan Wells è un ingegnere nucleare e sviluppatore VBA professionale. Pubblica i suoi tutorial VBA di Excel di facile comprensione per aiutare gli altri a scrivere macro migliori. Oltre a insegnare VBA, Ryan è lo sviluppatore principale di diversi componenti aggiuntivi di Excel. Puoi trovare i suoi tutorial su WellsR.com.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave