Macro para Guardar como PDF sólo una página

Tengo una hoja de excel para hacer mis facturas y me gustaría poder convertir sólo una de las hojas a PDF y enviarla por email.

Uso este código que funciona pero no del todo, ya que convierte a PDF todo el libro:

Sub Enviar_a_pdf()
Dim Ruta As String
Dim Archivo As String
Dim NombreArchivo As String
Dim Celda As String
        Ruta = ActiveWorkbook.Path & "\"
        Archivo = ActiveWorkbook.Name
        Celda = Cells(9, 8) 'Esta variable la uso para conseguir que el nombre de archivo sea el de esta celda (número de factura)
        NombreArchivo = Ruta & Archivo
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        Ruta & Celda, Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
End Sub

1 Respuesta

Respuesta
1

Cambia el activesheer por el nombre de la hoja que quieres enviar a pdf:

    Sheets("Hoja6").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        ruta & celda, Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

Es probable que tengas seleccionadas varias hojas y por eso se genera todo el libro.

O simplemente selecciona una hoja y después genera el pdf:

    Sheets("Hoja6").Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        ruta & celda, Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

Si con esas instrucciones te sigue generando to el libro, entonces vamos a tener que copiar la hoja a un nuevo libro y generar el pdf del nuevo libro, de esa forma te aseguras que solamente es una hoja:

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Sheets("Hoja6").Select
    ActiveSheet.Copy
    Set l2 = ActiveWorkbook
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        ruta & celda, Quality:= _
        xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
    l2.Close

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Gracias! ahora funciona perfectamente, peronecesito afinar un poco más.

El botón que ejecuta la macro lo he colocado en la página lateral derecha, que equivale a la página 3, por lo que al guardar el PDF también incluye las páginas 2 y 3, y yo sólo quiero la primera página.

Podemos indicar mediante la misma macro que solo guarde la página 1?

Cambia en la macro "Hoja6" por 1, por ejemplo:

Sheets("Hoja6").Select

Quedaría así:

Sheets(1).Select

Creo que no me he explicado bien,

Adjunto captura:

Ahora se está imprimiendo correctamente en PDF sólo la hoja2 ("FACTURA"), pero se están imprimiendo 3 páginas de la hoja "FACTURA" porque he puesto el botón de la macro en la página 3. Lo que necesito es que sólo se imprima la página 1 de la hoja "FACTURA".

Así:

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & celda, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, _
        IgnorePrintAreas:=False, From:=1, To:=1, _
        OpenAfterPublish:=True

Me da este fallo con este último cambio:


y se remarca esto al depurar:

Perdona Dante, el fallo no es del código, era porque al haber ejecutado la macro anteriormente intentaba machacar el archivo creado y daba ese fallo.

¿Podemos añadir algo para que verifique si ya existe un archivo con ese nombre y muestre una alerta?

Entra a la grabador de macros.

Guarda el archivo como pdf, antes de presionar el botón "Guardar", presiona el botón "Opciones", en la ventana que te aparece, selecciona la opción Páginas, presiona Aceptar y luego presiona Guardar.

Regresa a las macro y presiona el botón Detener grabación.

Regresa a VBA y busca el código que se generó y me lo envías para revisarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas