VBA Guardar Como (imprimir) en PDF

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on marzo 3, 2022

Este tutorial demostrará cómo guardar / imprimir en un PDF en Excel VBA.

Imprimir en PDF

Este sencillo procedimiento imprimirá la ActiveSheet en un PDF.

Sub imprimir_en_PDF()
 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="demo.pdf", Quality:=xlQualityStandard, _
      IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True
 
End Sub

También he creado una función con manejo de errores, etc. que imprimirá la ActiveSheet en un PDF:

Sub ImprimirPDF()
    Call guardar_PDF
End Sub
Function guardar_PDF() As Boolean ' Copia las hojas en un nuevo archivo PDF para enviarlo por correo electrónico


    Dim estaHoja As String, esteArchivo As String, ruta As String
    Dim guardarComo As String

    Application.ScreenUpdating = False

' Obtener el nombre del archivo guardado
    estaHoja = ActiveSheet.Name
    esteArchivo = ActiveWorkbook.Name
    ruta = ActiveWorkbook.Path
    guardarComo = ruta & "\" & estaHoja & ".pdf"

'Establecer la calidad de impresión
    On Error Resume Next
    ActiveSheet.PageSetup.PrintQuality = 600
    Err.Clear
    On Error GoTo 0

' Indicar al usuario cómo enviar
    On Error GoTo RefLibError
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=guardarComo, Quality:=xlQualityStandard, _
    IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True
    On Error GoTo 0
    
SaveOnly:
    MsgBox "Se ha guardado correctamente una copia de esta hoja como archivo .pdf: " & vbCrLf & vbCrLf & guardarComo & _
        "Revise el documento .pdf. Si el documento NO se ve bien, ajuste los parámetros de impresión e inténtelo de nuevo."
        
    guardar_PDF = True
    GoTo EndMacro
    
RefLibError:
    MsgBox "Imposible guardar como PDF. No se ha encontrado la biblioteca de referencia"
    guardar_PDF = False
EndMacro:
End Function

La función devuelve TRUE o FALSE si la impresión a PDF fue exitosa o no.

Función de guardar y enviar por correo electrónico un PDF

Esta función guardará la ActiveSheet como un PDF y (opcionalmente) adjuntará el PDF a un correo electrónico (asumiendo que tiene instalado Outlook):

Sub prueba_guardar_PDF()
    Call enviar_PDF("SendEmail")
End Sub


Function enviar_PDF(Optional action As String = "SaveOnly") As Boolean ' Copia las hojas en un nuevo archivo PDF para enviarlo por correo electrónico
    Dim hoja As String, archivo As String, ruta As String
    Dim guardarComo As String

Application.ScreenUpdating = False

' Obtener el nombre del archivo guardado
    hoja = ActiveSheet.Name
    archivo = ActiveWorkbook.Name
    ruta = ActiveWorkbook.Path
    guardarComo = ruta & "\" & hoja & ".pdf"

'Establecer la calidad de impresión
    On Error Resume Next
    ActiveSheet.PageSetup.PrintQuality = 600
    Err.Clear
    On Error GoTo 0

' Indicar al usuario cómo enviar
    On Error GoTo RefLibError
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=guardarComo, Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True
    On Error GoTo 0
    
' Enviar correo electrónico
    If action = "SendEmail" Then
        On Error GoTo SaveOnly
        Set olApp = CreateObject("Outlook.Application")
        Set olEmail = olApp.CreateItem(olMailItem)
        
        With olEmail
            .Subject = hoja & ".pdf"
            .Attachments.Add guardarComo
            .Display
        End With
        On Error GoTo 0
        GoTo EndMacro
    End If
    
SaveOnly:
    MsgBox "Se ha guardado correctamente una copia de esta hoja como archivo .pdf: " & vbCrLf & vbCrLf & guardarComo & _
        "Revise el documento .pdf. Si el documento NO se ve bien, ajuste los parámetros de impresión e inténtelo de nuevo."
        
    Send_PDF = True
    GoTo EndMacro
    
RefLibError:
    MsgBox "Imposible guardar como PDF. No se ha encontrado la biblioteca de referencia"
    Send_PDF = False
EndMacro:
End Function

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro - A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users! vba save as


Learn More!
vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples