Macro para guardar hojas en excel como pdf

Estoy haciendo una macro para guardar las hojas de un libro en excel como pdf, mi código funciona pero al final me aparece un error y quisiera depurarlo.

Espero alguien

Sub GPDF()
Dim Ruta As String
Dim NombreArchivo As String
Dim Hoja As Object
        Ruta = "C:\Users\Pérez Abisaí\OneDrive - M8\Documents\Hoy\"
        For Each Hoja In ThisWorkbook.Sheets
            NombreArchivo = Hoja.Name
            Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & NombreArchivo & ".pdf", OpenAfterPublish:=False
            'en la linea de arriba es donde me marca el error       
        Next Hoja
MsgBox "Los Archivos han sido guardados en" & Ruta
End Sub

n me pueda ayudar. 

3 respuestas

Respuesta
2

En la variable Ruta ya estás poniendo la diagonal al final de la ruta:

Ruta = "C:\Users\Pérez Abisaí\OneDrive - M8\Documents\Hoy\"

Después cuando concatenas la ruta y el archivo, estás poniendo otra diagonal

Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & NombreArchivo & ".pdf"

Te quedaría algo como esto:

"C:\Users\Pérez Abisaí\OneDrive - M8\Documents\Hoy\\archivo.pdf"

Entre la ruta y el archivo quedan 2 diagonales.


También revisa que la ruta exista

"C:\Users\Pérez Abisaí\OneDrive - M8\Documents\Hoy\"

Revisa los espacios, los acentos, las letras, todo debe ser igual al nombre de la carpeta que tienes en C:


También puedes verificar si la ruta existe, prueba con lo siguiente, con la verificación y sin una diagonal:

Sub GPDF()
    Dim Ruta As String
    Dim NombreArchivo As String
    Dim Hoja As Object
    Ruta = "C:\Users\Pérez Abisaí\OneDrive - M8\Documents\Hoy\"
    If Dir(Ruta) = "" Then
        MsgBox "La ruta no existe"
        Exit Sub
    End If
    For Each Hoja In ThisWorkbook.Sheets
        NombreArchivo = Hoja.Name
        Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & NombreArchivo & ".pdf", OpenAfterPublish:=False
        'en la linea de arriba es donde me marca el error
    Next Hoja
    MsgBox "Los Archivos han sido guardados en" & Ruta
End Sub


[Sal u dos, avísame cualquier duda.

Hola, ya corrí tu código y corregí el mío en el caso de la última diagonal y sigue marcando un error. 

Veo que el problema es porque la hoja está oculta.

Te anexo la macro actualizada:

Sub GPDF()
    Dim Ruta As String
    Dim NombreArchivo As String
    Dim Hoja As Object
    Ruta = "C:\Users\Pérez Abisaí\OneDrive - M8\Documents\Hoy\"
    Ruta = "C:\trabajo\"
    If Dir(Ruta) = "" Then
        MsgBox "La ruta no existe"
        Exit Sub
    End If
    For Each Hoja In ThisWorkbook.Sheets
        NombreArchivo = Hoja.Name
        If Hoja.Visible Then
            Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & NombreArchivo & ".pdf", OpenAfterPublish:=False
        Else
            Hoja.Visible = True
            Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & NombreArchivo & ".pdf", OpenAfterPublish:=False
            Hoja.Visible = False
        End If
    Next Hoja
    MsgBox "Los Archivos han sido guardados en" & Ruta
End Sub

[sal u dos

Respuesta
1

[Hola

¿Qué error exacto te da? ¿Probaste con otros archivos? Así mirando el código pues no debería haber ningún dilema.

Abraham Valencia

Hola, mira me arroja estos errores 

E

Es curioso porque el código funciona y no entiendo de donde viene este error. 
Gracias.

Dices que funciona, es decir ¿convierte todas las hojas a pdf? ¿Qué pasa con esa "Hoja16"? Parece que estás obviando algún dato que serviría para poder ayudarte.

Abraham Valencia

Hola
Efectivamente, guarda los archivos en la carpeta que marca la ruta. Solo al final no ejecuta la macro correctamente. 
La hoja 16 solo tiene una tabla para la lista despeglabe de los formularios, pero esa hoja y otras las tengo ocultas. No sé si eso influya al respecto

Pues he ahí el dilema: No se puede exportar a pdf las hojas ocultas. Usa tu macro con los siguientes cambios:

Sub GPDF()
Dim Ruta As String
Dim NombreArchivo As String
Dim Hoja As Object
Ruta = "D:\x"
For Each Hoja In ThisWorkbook.Sheets
    NombreArchivo = Hoja.Name
    If Hoja.Visible = False Then
        Hoja.Visible = True
        Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & NombreArchivo & ".pdf", OpenAfterPublish:=False
        Hoja.Visible = False
    Else
        Hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & NombreArchivo & ".pdf", OpenAfterPublish:=False
    End If
Next Hoja
MsgBox "Los Archivos han sido guardados en " & Ruta
End Sub

Comentas

Abraham Valencia

Respuesta

La siguiente macro te puede servir.

http://www.mediafire.com/file/eu2o9w6t9ka3ynm/Macro+exportar+factura+PDF.xlsm 

Copia y pega el código en tu archivo, lo único que debes cambiar es el rango que tiene en cuenta para crear el PDF.

Actualmente stá así.

Sub ExportarPDF()

Dim Ruta As String
Dim Nombre As String
Ruta = Range("J7")
Nombre = Range("AN9")

Worksheets("Factura").Range("A1:AH51") .ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Nombre, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub

Lo que está en negrita es lo que debes cambiar, simplemente ingresa el rango donde tienes tus dato y ya está. Debes tambien tener en cuenta que el nombre de la hoja de ese archivo se llama "Factura" debes manejar el mismo o cambiarlo en el código según como tengas la hoja de tu libro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas