¿Cómo guardar mediante macro un EXCEL a PDF?

Necesito de su colaboración.
Tengo una planilla EXCEL donde tengo la siguiente MACRO para que se guarde automáticamente con un nombre especifico que se ve en la celda B3. Funciona a la perfección. Lo que estoy buscando es poder guardarlo en formato PDF para evitar que se vean las fórmulas y que por accidente estas sufran alguna modificación o se borren
Sub Guardar()
'
' Guardar Macro
'
' Acceso directo: CTRL+h
'
Dim nombre As String, Ruta As String
Ruta = "C:\Users\Desktop\INFORMES\"
nombre = Range("B3").Value
Cells.Select
Selection.Copy
Workbooks.Add
Range("a1").Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"
ActiveWindow. Close
Windows("ARCHIVO A GUARDAR"). Activate
End Sub

Respuesta
1

[Hola

No es nada complicado, mira por aquí algo que escribí al respecto:

https://abrahamexcel.blogspot.com/2018/03/exportando-archivos-excel-pdf.html 

Comentas

Abraham Valencia

Hola, Gracias por el aporte

Lo que yo necesito es seguir usando la misma MACRO que expongo pero que el formato a guardar sea en PDF, pero cuando hago el cambio en la línea

ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx" ( AQUI PONGO PDF)

Al querer abrir el archivo me da error

Por eso te envié el enlace. Con el método "SaveAs" no podrás colocar directamente el archivo en formato pdf, necesariamente tienes que usar el método “ExportAsFixedFormat” tal cual explico en el artículo. Si relees que también puedes darle el nombre y ruta que deseas para el archivo pdf.

Abraham Valencia

1 respuesta más de otro experto

Respuesta
2

Te anexo el código actualizado para guardar en xlsx y también en PDF

Sub Guardar()
'
' Guardar Macro
'
' Acceso directo: CTRL+h
'
    Dim nombre As String, Ruta As String
    Ruta = "C:\Users\Desktop\INFORMES\"
    nombre = Range("B3").Value
    Cells.Copy
    Workbooks.Add
    Range("a1").Select
    ActiveSheet.Paste
    ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    '
    ActiveWindow.Close
    Windows("ARCHIVO A GUARDAR").Activate
End Sub

Si ya no quieres el archivo xlsx, entonces simplemente borra esta línea de la macro

    ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta.

'.[Avísame cualquier duda

Dante al aplicar el código solo para PDF, eliminando la linea de MACRO que me indicaste, al ejecutarla, se me abre un libro de EXCEL nuevo y me pregunta si quiero guardarlo, como puedo hacer para que esto no aparezca.

Y otra cosa como puedo hacer para que el PDF que se genera tenga todas los formatos del EXCEl, por ejemplo que este de manera horizontal

Te anexo la macro actualizada para guardar el pdf con el formato de la hoja y sin guardar el xlsx

Sub Guardar()
'
' Guardar Macro
'
' Acceso directo: CTRL+h
'
    Dim nombre As String, Ruta As String
    Ruta = "C:\Users\Desktop\INFORMES\"
    Ruta = "c:\trabajo\"
    nombre = Range("B3").Value
    ActiveSheet.Copy
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    ActiveWorkbook.Close False
    Windows("ARCHIVO A GUARDAR").Activate
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Se me pasó quitar una línea, va de nuevo la macro actualizada:

Sub Guardar()
' Guardar Macro
' Acceso directo: CTRL+h
'
    Dim nombre As String, Ruta As String
    Ruta = "C:\Users\Desktop\INFORMES\"
    nombre = Range("B3").Value
    ActiveSheet.Copy
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    ActiveWorkbook.Close False
    Windows("ARCHIVO A GUARDAR").Activate
End Sub


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Dante eres un genio!!

pero soy novato en esto y estoy tratando de hacer lo mismo (que guarde el formato) para la MACRO INICIAL

Sub Guardar()
'
' Guardar Macro
'
' Acceso directo: CTRL+h
'
Dim nombre As String, Ruta As String
Ruta = "C:\Users\Desktop\INFORMES\"
nombre = Range("B3").Value
Cells.Select
Selection.Copy
Workbooks.Add
Range("a1").Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"
ActiveWindow. Close
Windows("ARCHIVO A GUARDAR"). Activate
End Sub

Pero no logro que quede, pongo los argumentos de la que me enviaste pero se ponen en ROJO

Que debo hacer???

No guarda el formato de la hoja porque lo que estás copiando son las celdas:

Cells.Select
Selection. Copy

De la forma en que yo lo puse copia toda la hoja, y de esa forma copia celdas y el formato de la hoja:

ActiveSheet. Copy

Debes utilizar el código que yo te envié.

'No olvides valorar las respuestas.

Ok uso el que me envías pero como lo modifico solo para formato EXCEL

A qué te refieres con "solo para formato excel", ¿quieres guardar el archivo como excel?

Si lo quieres guardar como excel pones esta línea

ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"

Si lo quieres guardar como pdf pones esta línea:

    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False

Si quieres los dos, quedaría así:

Sub Guardar()
' Guardar Macro
' Acceso directo: CTRL+h
'
    Dim nombre As String, Ruta As String
    Ruta = "C:\Users\Desktop\INFORMES\"
    nombre = Range("B3").Value
    ActiveSheet.Copy
    ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    ActiveWorkbook.Close False
    Windows("ARCHIVO A GUARDAR").Activate
End Sub

Borra o pon la linea que necesites.


'No olvides valorar las respuestas.

Eso lo entiendo pero lo que quiero es que se guarde con el formato que tiene la planilla base, porque cuando ejecuto la macro no queda en horizontal el archivo que se genera sino en vertical

Cuando se copia la hoja conserva la orientación de la hoja. Revisa que la hoja que se va a copiar tenga orientación Horizontal.

Prueba con lo siguiente:

Sub Guardar()
' Guardar Macro
' Acceso directo: CTRL+h
'
    Dim nombre As String, Ruta As String
    Ruta = "C:\Users\Desktop\INFORMES\"
    nombre = Range("B3").Value
    worient = ActiveSheet.PageSetup.Orientation
    ActiveSheet.Copy
    ActiveSheet.PageSetup.Orientation = worient
    ActiveWorkbook.SaveAs Filename:=Ruta & nombre & ".xlsx"
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Ruta & nombre & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    ActiveWorkbook.Close False
    Windows("ARCHIVO A GUARDAR").Activate
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas