Macro impresión

En un libro de excel con 40 hojas de las que se completan en cada ocasión un numero distinto de hojas, como puedo con una macro o vba mandar a imprimir solo las hojas que contengan datos. O desde la ultima con datos hasta la primera. O un cuadro de dialogo que me pregunte que hojas quiero imprimir. Una solución para cualquiera de estas preguntas me vale. Gracias por tu ayuda. Saludos.
Respuesta
1
Crea un botón y asígnale esta macro:
Sub Imprimir()
' Imprimir Macro
' Macro grabada el 16/06/2008 por Richard Chacón
UserForm1.Show
End Sub
Luego crea un formulario en VB que tenga un botón al que le asignas esta macro:
Private Sub CommandButton1_Click()
Dim LaHoja, NombreHoja
LaHoja = TextBox1.Value
NombreHoja = "Hoja" & LaHoja
Sheets(NombreHoja).Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub
Al formulario le creas un TextBox y un botón llamado cancelar al que le asignas esta macro:
Private Sub CommandButton2_Click()
Unload Me
End Sub
Muy bueno para imprimir las hojas de una en una. Pero lo que necesito es que se impriman todas las que contienen datos de una vez.
Es decir una macro que selecciones las 20 de 40 que tienen datos y las imprima todas del tirón.
Ok,
Crea una hoja de control donde coloques el nombre de las hojas y en orden, luego a su derecha colocas una fórmula así:
=+SI(Hoja1!$C$3<>"";1;0)
y en la siguiente columna una formula asi:
=+SI(B1=1;DERECHA(A1;1)+0;0)
Estas fórmulas le aplican a todas las hojas y ordenas los datos en descendente según los resultados de la 2da fórmula.
Luego en el formulario agregas un botón para imprimir todas las hojas con datos y a ese botón le agregas un código como este:
Private Sub CommandButton3_Click()
Dim EstaHoja, NombreHojas, SiguienteHoja, LaUltima
Range("C1").Select
EstaHoja = Range("C1").Value
NombreHojas = "Hoja" & EstaHoja
Sheets(NombreHojas).Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Hoja5").Activate
ActiveCell.Offset(1, 0).Range("A1").Select
Do
Do While ActiveCell.Value <> 0
SiguienteHoja = ActiveCell.Value
NombreHojas = "Hoja" & SiguienteHoja
Sheets(NombreHojas).Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Hoja5").Activate
ActiveCell.Offset(1, 0).Range("A1").Select
Exit Do
Loop
Loop Until ActiveCell <> 0
End Sub
...
Solo te queda adaptarlo a tus necesidades.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas