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.
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 de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
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.
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.
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.
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
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.
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.
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).
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).
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.
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.
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.
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.
- Compartir respuesta
- Anónimo
ahora mismo