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.

Se guardará cada hoja como archivo PDF desde Excel

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.

En la carpeta PDF se guardarán los archivos de cada hoja del archivo de Excel

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

Lanzamos el Cuadro de dialogo Seleccionar carpeta usando la propiedad FileDialog en VBA.

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

Se guarda cada hoja como archivo PDF.

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

Descargar el ejemplo Guardar hojas en archivos PDF en Excel usando VBA y macros.zip

You may also like...