Macro para Imprimir Hojas según Condición

Alguien me puede ayudar a desarrollar una macro en excel para que me pueda imprimir solo algunas hojas solo si cumplen algunas condiciones.
Les explico tengo un archivo excel con 21 Hojas, en la Hoja 1 hay una lista basada en nombres, montos ($) y ciudad; y en las otras hojas (2, 3, 4, etc) cada hoja tiene un formato de factura que jala información de la Hoja 1, la primera fila de la lista esta relacionada con la hoja 2, la segunda fila esta relacionada con la hoja 3 y así sucesivamente, el tema es hacer una macro para imprimir las hojas 2, 3, 4, etc. Condicionándolo siempre que en la celda (monto) de la Hoja 1 haya un valor mayor a cero (0). Por ejemplo si en la Hoja 1 la celda B2 (monto) es mayor a cero entonces imprimir Hoja 2, si en la celda B3 (monto) es mayor a cero entonces imprimir Hoja 3 y así sucesivamente.
En la Hoja 1 debe haber un botón para imprimir y otro botón para borrar la lista.

1 respuesta

Respuesta
1
La siguiente rutina se coloca en un módulo. Luego en la hoja dibujá un control con la barra Formulario y asígnale esta rutina.
Lo que hace es imprimir todas las hojas siempre y cuando el valor en col B es > 0
El nro de fila debe coincidir con el nombre de hoja (B2 = Hoja2 según tu consulta)
Sub Botón36_AlHacerClic()
'desarrollada por Elsamatilde
'IMPRIMIR SEGÚN VALORES EN HOJA1
ActiveSheet.Range("B2").Select
'se recorre la col B hasta la fila 20 - AJUSTAR FIN DE RANGO
While ActiveCell.Row <= 20
If ActiveCell.Value > 0 Then
'el nombre de hoja estará condicionado a la fila B,
'es decir B2 será para Hoja2 - AJUSTAR VARIABLE FILA SI HICIERA FALTA
fila = ActiveCell.Row
Sheets("Hoja" & fila).Select
Call imprimeFact
End If
Elsa, muchas gracias por responder mi consulta, te comento que cuando ejecuto la macro me sale un error: ERROR DE COMPILACIÓN: No se ha definido Sub o Function, ACEPTAR o AYUDA, y se posiciona el cursor (Visual Basic) en Call imprimeFact.
¿A qué se debe?
Atento a tus comentarios!
Saludos.
Si, disculpa, en realidad no tenés una rutina de impresión.
Ajustá las líneas que se encuentran entre las negritas:
fila = ActiveCell.Row
On Error Resume Next
Sheets("Hoja" & fila).PrintOut 
End If
Elsa, realicé la modificación, en efecto ya no me sale ningún error, pero me esta imprimiendo todas las páginas de todas las hojas, y para de imprimir! Te comento que solo en cada hoja (a partir de la segunda hoja) hay un rango para imprimir y es de la A1 hata la G13, ¿cómo lo hago?
Otra cosa, por favor puedes interpretarme estos códigos:
While ActiveCell.Row <= 20
If ActiveCell.Value > 0 Then
fila = ActiveCell.Row
Sheets("Hoja" & fila).Select
Saludos y otra vez muchas gracias.
No habías mencionado lo del rango en tu consulta...;)
Bien, así quedaría la rutina entonces:
Sub Botón36_AlHacerClic()
'desarrollada por Elsamatilde
'IMPRIMIR SEGÚN VALORES EN HOJA1
ActiveSheet.Range("B2").Select
'se recorre la col B hasta la fila 20 - AJUSTAR FIN DE RANGO
While ActiveCell.Row <= 20
If ActiveCell.Value > 0 Then
'el nombre de hoja estará condicionado a la fila B,
'es decir B2 será para Hoja2 - AJUSTAR VARIABLE FILA SI HICIERA FALTA
fila = ActiveCell.Row
On Error Resume Next
Sheets("Hoja" & fila).Range("A1:G13").PrintPreview
End If
ActiveCell.Offset(1, 0).Select
Wend
End Sub
Explico tus consultas:
1 - While ActiveCell.Row <= 20   'ver línea en negrita: se recorre la col B mientras (while) la fila de la celda activa (activecell.Row) sea <= 20 
Si tenés 21 hojas y B2 indica hoja2, B21 indicará hoja 21, entonces tu rango final debiera ser 21. Ese es el ajuste que tenías que realizar
2- If ActiveCell. Value > 0 Then    'Si (if) el valor de la celda activa es > 0 entonces (Then) hará lo que sigue
3- fila = ActiveCell.Row     'guarda en una variable llamada 'fila' el nro de fila de la celda activa
4- Sheets("Hoja" & fila). Select     'utilizo esa variable para indicar la hoja . Cuando la celda es B3, la variable fila será = 3 y entonces selecciono la Hoja3
Así estaba planteada tu consulta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas