Guardar hojas en archivos PDF en Excel usando VBA y macros
En este Post y video tutorial te comparto una macro que nos ayudará a guardar cada hoja de un archivo de Excel en archivos PDF individuales. Y todavía más interesante, podrás definir un texto el cual será comparado con cada hoja del archivo, y si la hoja contiene ese texto, entonces se guardará como PDF.
El ejemplo
En el archivo de ejemplo contamos con 6 hojas con nombres diferentes, y deseamos crear 6 archivos PDF en base a esas hojas. También contamos con una carpeta llamada PDF dentro Documentos, que será la carpeta donde guardaremos los archivos PDF.
Figura 1. Se guardará cada hoja como archivo PDF desde Excel.
Ver Video Guardar cada hoja de un archivo como PDF
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Cómo funciona
Al ejecutar la macro se mostrará un Cuadro de diálogo de Excel el cual nos servirá para elegir la carpeta donde se guardarán los archivos. Posteriormente, y de manera opcional se mostrará un mensaje cada vez que una hoja haya sido guardada como PDF.
Figura 2. En la carpeta PDF se guardarán los archivos de cada hoja del archivo de Excel.
Cómo funciona la macro VBA
Usaremos la propiedad FileDialog para mostrar el Cuadro de diálogo que nos permitirá elegir la carpeta donde se guardarán los archivos PDF. Dicho Cuadro de dialogo será msoFileDialogFolderPicker. Además le añadiremos un título personalizado.
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "EXCELeINFO - Seleccionar carpeta" .Show
Figura 3. Lanzamos el Cuadro de dialogo Seleccionar carpeta usando la propiedad FileDialog en VBA.
Si elegimos una carpeta guardaremos la ruta de la carpeta en la variable Ruta, las cual nos servirá para saber dónde guardar los archivos.
If .SelectedItems.Count = 0 Then 'Nada Else Ruta = .SelectedItems(1)
Cuando hayamos elegido la carpeta entonces recorreremos cada una de las hojas y las guardaremos en la carpeta seleccionada. Para recorrer cada hoja usamos el bucle For each. Para hacer esta macro más interesante, utilizaremos el operador Like para comparar cada nombre de las hojas con un texto, y sólo se guardarán como PDF las hojas que contengan ese texto.
For Each Hoja In ThisWorkbook.Sheets NombreArchivo = Hoja.Name If NombreArchivo Like "*Hoja*" Then 'Esta línea de abajo la debes comentar cuando tengas muchas hojas a guardar MsgBox "Guardando en PDF " & NombreArchivo, vbInformation, "EXCELeINFO" Hoja.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=Ruta & "\" & NombreArchivo & ".pdf", OpenAfterPublish:=False Else 'Nada End If Next Hoja
Figura 4. Se guarda cada hoja como archivo PDF.
Cómo VBA de la macro
El siguiente procedimiento será la macro que nos ayudará con lo que hemos vimos anteriormente.
Option Explicit ' 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo ' Sub GuardarHojasComoPDF() Dim Ruta As String Dim NombreArchivo As String Dim Hoja As Object With Application.FileDialog(msoFileDialogFolderPicker) .Title = "EXCELeINFO - Seleccionar carpeta" .Show If .SelectedItems.Count = 0 Then 'Nada Else Ruta = .SelectedItems(1) For Each Hoja In ThisWorkbook.Sheets NombreArchivo = Hoja.Name If NombreArchivo Like "*Hoja*" Then 'Esta línea de abajo la debes comentar cuando tengas muchas hojas a guardar MsgBox "Guardando en PDF " & NombreArchivo, vbInformation, "EXCELeINFO" Hoja.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=Ruta & "\" & NombreArchivo & ".pdf", OpenAfterPublish:=False Else 'Nada End If Next Hoja End If End With End Sub
Descargar el archivo de ejemplo
Guardar hojas en archivos PDF en Excel usando VBA y macros.zip