Imprimir hojas excel individuales a pdf

Tengo un libro de excel con varias hojas, cada hoja tiene un nombre.
Si alguien pudiera ayudarme, necesito hacer una macro que me imprima cada hoja por separado a pdf, y cada pdf debe llevar el nombre de la hoja. Quizás no me explico bien. Muchas gracias por si podéis darme algunios consejos.

1 Respuesta

Respuesta
1
Supongo que al imprimir una página de Excel en PDF te dejará el fichero en la carpeta 'Mis Documentos' del usuario activo con el nombre que tiene la hoja de cálculo.
Si es así, la macro que te puedo pasar es esta:
Option Explicit
Sub imprimirPaginasDistintosPDFs()
    Dim i As Integer
    Dim nomAux As String
    Dim nomPDFlibro As String
    Dim nomPDFpagina As String
    ' Construimos el nombre del PDF que se generará para después cambiarle
    ' por el de la página
    nomPDFlibro = ThisWorkbook.Name
    If UCase$(Right$(nomPDFlibro, 4)) = ".XLS" Then nomPDFlibro = Left$(nomPDFlibro, Len(nomPDFlibro) - 4)
    nomPDFlibro = Environ("USERPROFILE") & "\Mis Documentos\" & nomPDFlibro & ".pdf"
    For i = 1 To ThisWorkbook.Sheets.Count
        ' Nombre que tendrá el fichero después de renombrarlo
        nomPDFpagina = Environ("USERPROFILE") & "\Mis Documentos\" & ThisWorkbook.Sheets(i).Name & ".pdf"
        ' Imprimimos la página (en el PDF, se supone)
        ThisWorkbook.Sheets(i).PrintOut
        ' Esperamos a que exista el libro y que lo podamos leer
        Do While Not existeFicheroOk(nomPDFlibro)
            DoEvents
        Loop
        ' Borramos el fichero de destino (por si existe otro anterior)
        On Error Resume Next
        Kill nomPDFpagina
        On Error GoTo 0
        ' Y renombramos el fichero
        Name nomPDFlibro As nomPDFpagina
    Next i
    MsgBox "Proceso terminado"
End Sub
Function existeFicheroOk(ByVal nomFich As String) As Boolean
    ' Comprobaremos si se puede abrir de lectura un fichero
    Dim nf As Integer
    On Error Resume Next
    nf = FreeFile
    Open nomFich For Input As nf
    Close nf
    existeFicheroOk = (Err = 0)
    On Error GoTo 0
End Function
AVISO: tienes que tener como impresora predeterminada la que imprima los PDFs.
No me funciona porque solo me coge la primera hoja.
¿Hago algo mal?
Yo probé el código antes de mandártelo y funcionaba correctamente.
No sé si has reescrito lo que te puse. Es preferible que hagas copiar y pegar porque hay sitios donde pongo "(i)" y podrías estar copiándolo como "(1)".
Desconozco si será eso o no. De todas formas, si quieres cópiame todo el código que tengas puesto y me lo envías para que lo revise.
Tenías razón, ahora me funciona.
Se podría aplicar a todas las hojas a la vez, el libro de excel tiene 58 hojas y me aplicando esta macro, siempre me coge la primera hoja.
¿Es posible?
Muchas gracias
Si tu libro tiene 58 páginas, debería generarte 58 ficheros PDF. Uno por cada una de ellas.
En principio, al imprimir, se está generando un fichero PDF con el mismo nombre que tiene el libro, por lo que si no lo renombrasemos se perdería al imprimir la siguiente página.
Si quieres que vaya cambiando de página según vaya preparando los ficheros, puedes incluir la siguiente línea detras de la que pone "For i = 1 To ThisWorkbook.Sheets.Count". La línea a añadir sería:
        ThisWorkbook.Sheets(i).select
Si no te genera bien los 58 ficheros mandame el código y te digo dónde está el fallo.
Siento molestarte tanto pero no hay manera,
Te puedo mandar el fichero.
Muchas gracias.
Si el fichero es pequeño me lo puedes mandar comprimido en "zip" a [email protected]
Si ocupa más de 500 Kb, envialo a [email protected] y me mandas un aviso al otro correo (suelo ver el de hotmail sólo cuando sé que hay algo).
Por cierto, no olvides ponerme tu nick de aquí para saber de dónde viene. (He recibido correos con ficheros que no sabía de quien eran ni lo que tenía que mirar).
Ya te lo he mandado.
Gracias
Te comento, he probado la hoja de cálculo y me funciona bien la generación de los PDFs.
Unicamente he visto algún problema cuando repito el proceso muchas veces porque me empieza a pedir el nombre del fichero (posiblemente por problemas de memoria del Excel o alguna cosa así). En ese caso, si utilizo directamente el nombre que propone y pincho el botón de guardar, el proceso continúa y termina correctamente.
De momento sigo haciendo algunas pruebas más, pero debo reconocer que no sé qué problema te está dando.
Cuando vea algo nuevo te cuento.
Muchas gracias,
quizás yo hago alguna cosa mal, pero copie exactamente lo que me dijiste.
Seguiré intentándolo.
No es que hagas nada mal porque probé directamente la hoja de cálculo que me mandaste y me funcionaba.
Supongo que tienes definida una impresora que te genera el PDF. En mi caso tengo la 'Adobe PDF' (quizá tu tengas la CutePDF o cualquier otra).
Lo que no sé es si funciona exactamente igual que lo que yo tengo. En mi caso, cuando genero un pdf desde una hoja de cálculo, el nombre del fichero generado es el mismo que el Excel cambiando la extensión por 'pdf'. Si la impresora tuya genera otro nombre, la macro que te envié fallaría, pero no sé si el nombre generado es igual, si lo genera en otro sitio o qué está ocurriendo.
Haz una prueba: imprime una página cualquiera del libro y me dices el nombre (path incluido) del fichero generado y el nombre de la impresora utilizada. A ver si eso nos da una pista.
Estos días de vacaciones lo he probado, y me ha funcionado, era problema de la comfiguración de la impresora.
Muchas gracias por todo. Me ha sido muy útil.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas