Macro para guardar Excel en PDF

Dante Amor

Estimados,

Tengo un archivo en Excel 2010 el cual quiero imprimir (o guardar, según sean sus opiniones) un rango de celdas (ya definidos por el área de impresión) en PDF.

He buscado y encontrado en este página soluciones para casos donde uno escribe manualmente en una celda la dirección donde se va a guardar el pdf y el nombre con el cual se va a guardar pero necesito ir más allá.

El archivo de excel se encuentra en una carpeta que a su vez tiene una sub carpeta, donde pretendo guardar los pdf (esta subcarpeta se llamará "Respaldo"). Esta manera de tener los archivos siempre será así. Es decir, que la macro debería tener un comando que lea y guarde la dirección donde se encuentra el archivo, para posteriormente guardar el pdf en la subcarpeta.

¿Por qué lo necesito de esa manera? Porque si bien el archivo lo desarrollo en mi pc, va a ser usado en otras pc donde el archivo se va a encontrar en otros directorios.

He desarrollado la siguiente macro, pero me arroja un error y no encuentro la solución y/o el error que cometo:

Sub guardar()
' - - - - - - - - - - IMPRIMIR EN PDF - - - - - - - - - - - - - - - - -
    Set h1 = Hoja1
    Fecha = h1.[J5]
    'Dirección donde se va a guardar el PDF CREADO y nombre del PDF
    nombre = "STK al " & Fecha
    ruta = ActiveWorkbook.Path & "\Respaldo"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ruta & nombre, Quality:= _
    xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
    MsgBox "PDF creado", vbInformation
End Sub


        
Respuesta
1

Te paso la macro

Sub guardar()
Act.Aortiz
' - - - - - - - - - - IMPRIMIR EN PDF - - - - - - - - - - - - - - - - -
    Set h1 = Sheets("Hoja1")
    Fecha = h1.[J5]
    'Dirección donde se va a guardar el PDF CREADO y nombre del PDF
    nombre = "STK al " & Fecha
    ruta = ActiveWorkbook.Path & "\Respaldo"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ruta & nombre, Quality:= _
    xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
    MsgBox "PDF creado", vbInformation
End Sub

corregí esta línea

Set h1 = Sheets("Hoja1")

Valora para finalizar 

1 respuesta más de otro experto

Respuesta
1

H   o l a:

Te comento cual es el problema.

En la variable Fecha, estás poniendo una fecha, normalmente las fechas tienen diagonal, por ejemplo: 23/01/2017, pero los archivos no pueden contener la diagonal como parte del nombre del archivo, por lo tanto hay que cambiar esa diagonal por un guión.

Puede ser así:

Fecha = Format(h1.[J5], "dd-mm-yyyy")

Otro detalle que observo, es que en tu macro te falta una diagonal (inversa) "\" para el nombre de la carpeta, entonces puede ser así:

ruta = ActiveWorkbook.Path & "\Respaldo\"

Otra condición por la que puede presentarse el error, es porque no exista la carpeta "Respaldo", en tal caso podemos revisarla con lo siguiente:

    ruta = ActiveWorkbook.Path & "\Respaldo\"
    If Dir(ruta, vbDirectory) = "" Then
        MsgBox "La carpeta Respaldo, no existe"
        Exit Sub
    End If


Por último estás estableciendo en la variable h1 la Hoja1, pero luego estás enviando a pdf la hoja activa, si la hoja1 y la hoja activa son la misma, entonces debería ser así:

    h1.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True

La macro completa con las actualizaciones:

Sub guardar()
' - - - - - - - - - - IMPRIMIR EN PDF - - - - - - - - - - - - - - - - -
    Set h1 = Hoja1
    Fecha = Format(h1.[J5], "dd-mm-yyyy")
    'Dirección donde se va a guardar el PDF CREADO y nombre del PDF
    nombre = "STK al " & Fecha
    ruta = ActiveWorkbook.Path & "\Respaldo\"
    If Dir(ruta, vbDirectory) = "" Then
        MsgBox "La carpeta Respaldo, no existe"
        Exit Sub
    End If
    h1.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True
    MsgBox "PDF creado", vbInformation
End Sub

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas