Vba excel Imprimir según valor celda

Tengo en la columna a de mi libro una serie de nombres que hace referencia a hojas de un libro no abierto. En la columna B tengo una fórmula de manera que si es 1 el valor de la columna a quiero generar una macro que imprima esa página concreta del libro cerrado (llamado por ejemplo cerrado).

He usado la siguiente instrucción:

Sub PrintPages()

If Rangel ("b1").value > 0 Then

workbooks("cerrado").open
Sheets("Pagina1").Select
Selection.PrintOut

workbooks("cerrado").close

End If

'Etc para todas páginas 

End Sub

Se podría optimizar la instrucción de forma que se cargue más rápido (teniendo en cuenta que en el libro cerrado hay imágenes por cada hoja)y que imprima las páginas cuyo valor en b en el libro original sea 1(ya que me salían hojas en blanco porque supongo que imprime antes de que se habran las imágenes del libro cerrado)

1 Respuesta

Respuesta
1

Intenta con las instrucciones screenupdating y doevents:

Sub PrintPages()
    Application.ScreenUpdating = False
    If Rangel("b1").Value > 0 Then
        Workbooks. Open ("cerrado")
        DoEvents
        Sheets("Pagina1"). PrintOut
        DoEvents
        ActiveWorkbook. Close
        DoEvents
    End If
    'Etc para todas páginas
    Application.ScreenUpdating = True
End Sub

Si la hoja que se imprime todavía no presenta las imágenes, entonces agrega la instrucción wait para esperar 5 segundos a que el archivo sea cargado.

Sub PrintPages()
    Application.ScreenUpdating = False
    If Rangel("b1").Value > 0 Then
        Workbooks. Open ("cerrado")
        DoEvents
        Application. Wait Now + TimeValue("00:00:05")
        Sheets("Pagina1"). PrintOut
        DoEvents
        ActiveWorkbook. Close
        DoEvents
    End If
    'Etc para todas páginas
    Application.ScreenUpdating = True
End Sub

Si 5 segundos es mucho tiempo, pon 03, si 05 no es suficiente pon 07.

Saludos. Dante Amor

Si es lo que necesitas.

Sigue muy lento.Podria con una orden:Sheet(Array(que se pongan aquí las hojas que quiero imprimir según el valor de la celda z1,por ejemplo,donde tengo ya recogida con fórmula las hojas  seleccionadas)).select

o lo que es lo mismo tengo en celda z1 todas las páginas que quiero seleccionar para imprimir de otro libro abierto y no escribo correctamente la instrucción porque pongo:

Sheet(Array(range("z1").value)).select

creo que esta mal esta instrucción pero para explicarme puede valer.gracias

Pero ya no entendí.

¿Quieres abrir el libro e imprimir ciertas hojas?

¿O el libro ya está abierto y solamente vas a imprimir ciertas hojas?

Con qué quieres que te ayude, ¿con el código para imprimir las hojas?

En tu libro con la macro, en la hoja1, pon la lista de las hojas a imprimir, por ejemplo:

        Z

1 hoja1

2 reporte

3 informe

4 etc


Sub imprimir()
'Por.Dante Amor
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Hoja1")
    Set l2 = Workbooks("cerrado.xlsx")
    On Error Resume Next
    For i = 1 To h1.Range("Z" & Rows.Count).End(xlUp).Row
        hoja = h1.Cells(i, "Z")
        l2.Sheets(hoja).PrintOut Copies:=1, Collate:=True
    Next
End Sub

Lo que hace la macro es, tomar los nombres de hoja que tienes en la columna Z y empezar a imprimir.

El libro "cerrado.xlsx" deberá estar abierto.

En el libro con la macro deberás tener una hoja "Hoja1" y en la columna Z poner las hojas que vas a imprimir.


Prueba y me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas