¿Cómo identificar la posición de la pantalla en donde hay un cambio de página en la impresión de excel, con código vba?

Me encuentro realizando una macro que entre muchas cosas, realiza una cotización, el caso es que la cotización debe terminar en PDF, ese no es el problema se como hacerlo. El problema radica en que dada la longitud de la cotización esta termina en varias páginas y como la cotización depende de tablas, muchas veces las tablas quedan partidas entre páginas y la presentación se ve muy fea. La forma correcta es la siguiente:

Pero hay veces que sucede esto (o bien dividiendo los subtotales):

Lo que necesito entonces es saber mediante código de vba en que parte se dará el salto de página para que pueda introducirle a la macro ciertas comprobaciones para que sepa si debe insertar o no celdas para separar y ordenar las tablas pues son varias y por esto sucede el problema. (Ya he intentado definir las áreas de impresión -una por cada tabla- pero esto deja mucho espacio en blanco entre las páginas y sigue siendo muy impresentable al tratarse de cotizaciones, adicionalmente si la tabla es muy grande sigue presentándose el mismo problema).

2 Respuestas

Respuesta
1

El salto de página puede ser por la misma hoja de excel que excede los margenes de tu hoja, revisa eso si esta correcto te envió un código para que si tu código de transformación a PDF tiene un error

Antes que nada gracias por la pronta respuesta. Ese puede ser el caso, he intentado ajustar el tamaño de página a oficio ( que es la hoja más larga que encontré en las opciones de excel) pero en algunas ocasiones a pesar de que el tamaño de la pantalla es mayor, siguen existiendo varias páginas oficio y por tanto hay saltos de página. Hay alguna forma que sin afectar al escala 100%, ¿el largo del archivo pdf sea solo 1 página? ¿Por más larga que sea?

Debes Cuadrar bien tu documento en una sola página para lograr lo que deseas no busques más hojas grandes acorta columnas y pon letras más pequeñas juega con eso a ver si logras lo que deseas

Respuesta
1

H o l a:

Para eliminar todos los saltos de hoja:

ActiveSheet. ResetAllPageBreaks

Para insertar un salto de hoja:

 ActiveSheet. HPageBreaks.Add Cells(i, "A")
    Set ActiveSheet.HPageBreaks(n).Location = Cells(i, "A")

Donde i puede ser un contador para especificar en dónde quieres el salto de hoja. Y n es un contador de cada uno de los saltos que has puesto.




En el siguiente ejemplo, la macro inserta una salto de hoja antes de la celda que contiene el texto "Capítulo"

Sub salto()
'Por.DAM
una = False
t = 0
hoja = 750
n = 1
Application.ScreenUpdating = False
ActiveWindow.View = xlPageBreakPreview
ActiveSheet.ResetAllPageBreaks
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
    If Cells(i, "B") = "Capítulo" Then
        If una Then
            ActiveSheet.HPageBreaks.Add Cells(i, "A")
            t = Rows(i).Top
            Set ActiveSheet.HPageBreaks(n).Location = Cells(i, "A")
            n = n + 1
        End If
        una = True
    End If
    dif = Rows(i).Top - t
    If dif >= hoja Then
        ActiveSheet.HPageBreaks.Add Cells(i, "A")
        t = Rows(i).Top
        Set ActiveSheet.HPageBreaks(n).Location = Cells(i, "A")
        n = n + 1
    End If
Next
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub

La macro tiene otros detalles específicos para ese caso, la idea es que tomes el código que necesitas para insertar los saltos donde los necesitas.


Otra forma de insertar saltos, es llevar un contador de filas, y realizar el salto en cierto número de filas, pero esto depende de que todas las filas tengan el mismo alto.

Otra forma es ir acumulando el alto de fila, y realizar el salto en cierto tamaño de hoja.


Como puedes ver, no es nada sencillo realizar los ajustes de la hoja, tienes que considerar esos factores, incluso el tamaño de letra, el margen en el encabezado y pie de página, puede ser que hasta el tipo de impresora.


E spero que te sea de ayuda.


':)
':)

¡Gracias!  me interesa el acumulador del alto de fila y ahí agregar el salto de página, cual seria el código en este caso?

saludos,

No había visto el código, veo que está ahí, me surge una duda, no es posible que excel me diga en términos de alto, ¿exactamente dónde está el salto de página?

H o l a:

Lo que puedes saber es en cuál fila están los saltos de página, por ejemplo:

    For Each pg In ActiveSheet.HPageBreaks
        fila = pg.Location.Row
    Next

En la variable fila tienes el número de fila donde se encuentra un salto de página.

Pero si vas a mover los saltos de página, te recomiendo que borres todos y pongas el salto de página donde lo necesitas.


':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas