División de hoja para imprimir

Hola fejoal: Aquí va la pregunta: Resulta que quiero imprimir una larga lista de datos, que me pueden quedar en 4 o 5 hojas. El punto es que los datos están agrupados según un número, y este número puede comprender 1 o más filas. La idea es que si los datos están agrupados según un número POR, estos datos no me salgan en hojas separadas,
osea en 1 hoja me salgan hasta el número (X-1) e insertar filas hasta que los datos asociados al número X me queden al principio en la siguiente hoja.
Ahora la pregunta es: ¿Cómo saber cual es la primera fila de la siguiente hoja a imprimir? (Este no siempre es el mismo pues depende de la fuente que se use, los títulos, etc etc.)
Ojala y puedas ayudarme... Si no es así, gracias de todas maneras.
Fernando.

1 respuesta

Respuesta
1
Mejor que insertar líneas (y alterar el diseño de tu página) es aprovechar los saltos de página.
De esta manera, si tus datos estuvieran ordenados por el número que los agrupa y no hubieran celdas vacías en el medio, la siguiente macro se encargará de colocar (o sacar) los saltos de página necesarios para que cada grupo se inicie en la primera línea de otra hoja.
Como ya sabes, inserta un módulo en el VBE y pega este código:
Sub PoneSaltos()
Ante = ActiveCell.Value
Do
ActiveCell.Offset(1).Select
If Ante = ActiveCell.Value Then
Rows(ActiveCell.Row).PageBreak = xlPageBreakNone
Else
If Not IsEmpty(ActiveCell) Then
Rows(ActiveCell.Row).PageBreak = xlPageBreakManual
Ante = ActiveCell.Value
End If
End If
Loop Until IsEmpty(ActiveCell)
End Sub
Ahora bastará que selecciones la primera celda donde empiezan los números de grupo y ejecutes la macro "PoneSaltos" y obtendrás lo que me solicitabas.
Espero que así sea.
Un abrazo!
Fernando
Fejoal: hasta aquí todo bien, pero al parecer no fui del todo claro. El problema es que si por ejemplo los datos asociados a 1 número son solo 2 (o 1...) igual me los deja en 1 sola hoja. Lo que quiero es que poga todos los que alcancen en 1 sola hoja, y si el último no alcanza a salir completo, entonces sí me los pase a la siguiente hoja.
¿Se puede?... ojala que si.
eso seria... por ahora :)
Gracias.
Fernando.
Claro, esto es otra cosa.
Por tanto, puedes probar la siguiente macro que trabaja distinto:
Sub SeparaExc()
'primera celda del rango:
Inilista = "A2"
Application.ScreenUpdating = True
LinXpag = 0
Range(Inilista).Select
Do
ActiveCell.Offset(1).Select
Cont = Cont + 1
If Rows(ActiveCell.Row).PageBreak = xlPageBreakAutomatic Then
'busca primer salto automático
LinXpag = Val(IIf(LinXpag = 0, Cont - 1, LinXpag))
'si utlimo de página anterior es igual a primero de esta página
If ActiveCell.Value = ActiveCell.Offset(-1).Value Then
While ActiveCell.Value = ActiveCell.Offset(-1).Value
ActiveCell.Offset(-1).Select
ContAtr = ContAtr + 1
Wend
Rows(ActiveCell.Row).PageBreak = xlPageBreakManual
If ContAtr >= LinXpag Then
ActiveCell.Offset(ContAtr + 1).Select
End If
ContAtr = 0
End If
ElseIf Rows(ActiveCell.Row).PageBreak = xlPageBreakManual Then
Rows(ActiveCell.Row).PageBreak = xlPageBreakNone
End If
Loop Until IsEmpty(ActiveCell)
Range(Inilista).Select
Application.ScreenUpdating = True
End Sub
Esta es una macro que controla la situación de cada línea. Cuando encuentra un salto de página, evalúa si es manual (y lo quita) o si es automático, en cuyo caso controla que el registro anterior al salto sea distinto del dato posterior.
Si fueran iguales, vuelve hacia arriba hasta donde se produzca un cambio e inserta allí un salto de página manual.
Y así sigue hasta la última celda ocupada de tu lista.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas