Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Guardar rango de celdas como PDF

| 11 comentarios

El método ExportAsFixedFormat de Microsoft Excel 2007 permite exportar un archivo con el formato que se especifique. La sintaxis de este método es la siguiente:

expresión.ExportAsFixedFormat(Type, Filename, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish)

Donde expresión es la variable que representa un objeto Worksheet mientras que los parámetros son los siguientes:

Type.- Define el tipo de formato al que se debe exportar. Puede ser xlTypePDF o xlTypeXPS.

Filename.- Indica el nombre del archivo que se debe guardar; se puede incluir una ruta de acceso completa.

Quality.- Puede ser xlQualityStandard o xlQualityMinimum.

IncludeDocProperties.- True indica que se deben incluir las propiedades de los documentos, False indica lo contrario.

IgnorePrintAreas.- True indica que se omiten las áreas de impresión establecidas al publicar el libro, False indica lo contrario

From.- Número de la página en la que comienza la publicación.

To.- Número de la última página que se va a publicar.

OpenAfterPublish.- True indica que se muestra el archivo en el visor después de haberlo publicado, False indica lo contrario.

Para guardar un rango de celdas la sintaxis sería como la siguiente:

Sheets("Sheet1").Range("A1:E10").ExportAsFixedFormat ...

Guardar rango de celdas como PDF

 

Por: Christian Gózar

11 comentarios

  1. Al ejecutar la función obtengo el error "5" indicando que el metodo o el argumento no es valido. Estoy tratando de hacerlo en MS Office 2010.

  2. Funciona perfecto, pero mi duda es como puedo hacer para el rango sera variable, es decir que pueda elegir diferentes rango a exportar, espero haberme dado a entender

    slds. y gracias de antemano

    • Sub TestExportAsFixedFormat()

      Dim range_value As String
      Dim name As String

      range_value = InputBox("Ingresa el rango de celdas que deseas guardar", "Rango")
      name = InputBox("Ingresa el nombre del archivo", "Ingresa nombre")

      Dim rng As Range
      Set rng = Range(range_value)

      Dim fileName As String
      fileName = "C:\Users\Usuario1\Downloads\" + name + ".pdf"

      rng.ExportAsFixedFormat Type:=xlTypePDF, _
      fileName:=fileName, Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=True, _
      From:=1, To:=1, OpenAfterPublish:=True
      End Sub

  3. Me funciona perfecto y logré adaptarlo a mi necesidad. Muchas Gracias por el aporte.

    Yo imprimos recibos de clientes. Mi Aplicación realiza impresiones individuales de cada recibo y con esta ayuda tuya, ahora puedo guardar un respaldo en PDF de cada recibo.

    Una consulta.
    ¿Se podría hacer que en el proceso de impresión de cada recibo se vayan agregando dentro del mismo documento "pdf"; es decir si imprimo 20 recibos, que no me genere 20 "pdf", sino solo uno con 20 páginas conteniendo cada una, cada uno de los recibos???
    Espero haberme hecho entender.

    Nuevamente Muchas Gracias por tu aporte.
    Saludos.

  4. Hola Estoy Trabajando con esta Macro pero necesito que me pregunte cuantas hojas deseo exportar quien me puede ayudar

    Sub Exportar_Cotizacion_PDF()

    Ans = MsgBox("Seguro quiere Guardar en PDF la Cotizacion?", vbYesNo, "Aviso")

    If Ans = vbYes Then

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\Daniel\Cotizaciones\Cotizaciones PDF\2017\" _
    & "DE" & Range("G3") & " " & Range("D13").Value _
    , Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

    End If

    End Sub

    • Buenas Noches, yo lo haría así, no se si se ajuste a lo que necesita, espero le sea de utilidad:

      Sub Exportar_Cotizacion_PDF()
      Dim rng As Range
      Set rng = Range("g3:d13")
      ActiveSheet.PageSetup.PrintArea = rng

      Dim fileName As String
      fileName = "C:\Temp\cotizacion.pdf"

      Ans = MsgBox("Seguro quiere Guardar en PDF la Cotizacion?", vbYesNo, "Aviso")
      If Ans = vbYes Then

      rng.ExportAsFixedFormat Type:=xlTypePDF, _
      fileName:=fileName, Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=True, _
      From:=1, To:=1, OpenAfterPublish:=True

      End If
      End Sub

  5. Hola
    Me gustaría saber que se cambiaría para guardar un campo selecionado a jpg

  6. Hola.
    Buenas tardes.
    Necesito implementar el mismo procedimiento pero para guardar un rango seleccionado como imagen jpg o png?

  7. Hola buenos dias, me funciona como lo requerio imprimir un area en especifica, pero como puedo hacer para configurar los margenes de la hoja, muchas gracias por el aporte, lo coloque asi pero no me los guarda

    Sub imprimir()
    Set wsAsigVer = Worksheets("ASIGNACION_VERIFICADOR")
    wsAsigVer.Select

    With wsAsigVer.PageSetup
    .LeftMargin = Application.InchesToPoints(0.8)
    .RightMargin = Application.InchesToPoints(0.6)
    .TopMargin = Application.InchesToPoints(0.6)
    .BottomMargin = Application.InchesToPoints(0.6)
    .Orientation = xlLandscape
    .FitToPagesWide = 1
    End With

    wsAsigVer.Range("I2:Q30").ExportAsFixedFormat Type:=xlTypePDF, Quality:=xlQualityMinimum, IncludeDocProperties:=true, IgnorePrintAreas:=False, OpenAfterPublish:=True

    End Sub

  8. Hola, estoy intentando crear un pdf incluyendo dos hojas y seleccionando el rango.
    TargetRange y TargetRange2 son los rangos que quiero mostrar.
    ........................Este es el codigo..............
    Set TargetSheet = ThisWorkbook.Sheets("Hoja1")
    Set TargetSheet2 = ThisWorkbook.Sheets("Hoja2")
    Dim TargetRange As Range
    Dim TargetRange2 As Range
    Set TargetRange = TargetSheet.Range("E1:J22")
    Target2_endrow = TargetSheet2.Cells(3, 1).End(xlDown).Row
    Set TargetRange2 = TargetSheet2.Range("A1:f" & Target2_endrow)
    If myFile "False" Then
    TargetRange.ExportAsFixedFormat & TargetRange2.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=myFile, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
    ......................fin del código.........................
    El error esta aquí y no consigo saber cual es el correcto lenguaje para indicarle;
    TargetRange.ExportAsFixedFormat & TargetRange2.ExportAsFixedFormat

  9. Funciona muy bien, Perfecto!!1

    Gracias por compartir conocimientos

Deja una respuesta

Los campos requeridos estan marcados con *.