Imprimir rangos de varias hojas en pdf

Resulta que tengo 60 hojas en mi libro, las cuales tienen unos formularios que deseo imprimir en pdf, y ademas que me guarde todos los pdf en una ubicación con el nombre de una celda en cada hoja, bueno hasta ahi lo he logrado si lo hago uno por uno, pero no lo he logrado automatizar para que realice tal procedimiento para todas las hojas, mil gracias por su colaboración, el código que estoy utilizando es el siguiente:

Sub test()

Dim sh As Worksheet, contá As Long

contá = 1

Windows.Application.ScreenUpdating = False

For Each sh In ThisWorkbook.Sheets

RutaArchivo = "C:\Area_Calidad\Indicadores\Fichaspdf\" + Range("D6") + ".pdf"

Range("A1:E25").Select

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _

RutaArchivo, _

Quality:=xlQualityMaximum, IncludeDocProperties:=True, IgnorePrintAreas _

:=False, OpenAfterPublish:=False

contá = contá + 1

Next

Windows.Application.ScreenUpdating = True

End Sub

Si alguien me puede decir en que estoy fallando o me puede dar una manera de realizarlo.

1 respuesta

Respuesta
1

Pues lo que te faltaba es que no seleccionabas el libro, con lo cual era siempre el mismo libro y se sobreescribía sobre sí mismo tantas veces como libros había. Es simplemente usar una orden

sh.Select

y la macro queda

Sub test()
Dim sh As Worksheet, contá As Long
contá = 1
Windows.Application.ScreenUpdating = False
For Each sh In ThisWorkbook.Sheets
   RutaArchivo = "C:\Area_Calidad\Indicadores\Fichaspdf\" + Range("D6").Text + ".pdf"
   sh.Select
   Range("A1:E25").Select
   Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _
      Quality:=xlQualityMaximum, IncludeDocProperties:=True, _
      IgnorePrintAreas:=False, OpenAfterPublish:=False
   contá = contá + 1
Next
Windows.Application.ScreenUpdating = True
End Sub

De todas formas tienes una variable llamada contá que aquí no hace ninguna función. A no ser que sea una variable global que uses en otra parte y que necesité tomar el valor del número de libros puedes quitar las dos líneas donde aparece.

Procura también que no haya ninguna celda D6 vacía en ningún libro porque da error

Buen dia valeroasm mil gracias por tu tiempo y colaboración, me ha funcionado perfecto, pero me estrello con un problema que realmente no coincide con la pregunta formulada, pero aprovecho para saber si me puedes ayudar, resulta que efectivamente me imprime pero me imprime ese rango en 3 horas je je bueno la idea es que quede una hoja en un pdf, grave una macro para saber cual es el código en el que defino en una hoja el área de impresión que seria el mismo de la selección.

Range("A1:E25").Select ActiveSheet.PageSetup.PrintArea = "$A$1:$E$25"

y lo pongo antes del código, pero igual no logro que me imprima en una sola hoja, bueno si tal vez conoces una manera o que me puedas referenciar, mil gracias

No entiendo la pregunta. Debe ser un problema muy distinto. Aquí lo que hacemos es guardar cada hoja en un fichero distinto.

¿Y lo que preguntas es sobre imprimir el libro que tienes abierto actualmente?

Yo he ejecutado la orden

ActiveSheet.PageSetup.PrintArea = "$A$1:$E$25"

Porque la linea anterior sobra, las macros te graban cosas que pueden sobrar,

Y efectivamente me hace que el área de impresión sea A1:E25, todo lo de fuera no se imprime.

Podrías plantearme bien y completa la consulta. Pero te pediría por favor que lo hicieses en otra pregunta tras finalizar esta. Mándamela a Matemáticas que está en la categoría Ciencias e Ingeniería, ahí me verás y me la mandas a mi.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas