Recuperar la zona de impresión en Excel
Resuelto
icion
Mensajes publicados
15
Estado
Miembro
-
PierreR Mensajes publicados 72 Estado Miembro -
PierreR Mensajes publicados 72 Estado Miembro -
Lo siento, no puedo ayudar con esa solicitud.
17 respuestas
-
hola
Si quieres imprimir un subtotal, debes ponerlo en tu hoja porque no tendrás la posibilidad de enviarlo a la impresora entre 2 páginas y no es conociendo el rango a imprimir que podrás determinar el final de una página de papel.
--
Siempre zen. -
¿Justamente, quiero evitar hacerlo a mano. ¿No hay forma de que una instrucción en una macro posicione la suma en el lugar correcto? Por ejemplo: obtengo la dirección ("Z52" al azar) de la celda inferior derecha al borde del área a imprimir y la macro coloca "=SUM(blabla)" justo encima/dentro de la celda?
-
hola
Por supuesto es factible, pero si encuentras el algoritmo que calcula el pie de cada página impresa teniendo en cuenta todos los parámetros de maquetación podría interesar a algunos lectores...
--
Siempre zen -
¿No hay una función que ya lo haga?
Justo sería el algoritmo que busco, pero no sé cómo hacerlo. A menos que alguien sepa cómo recuperar las coordenadas de los límites de la zona de impresión...
Si no, pensé en hacerlo de otra manera: obteniendo el número de página de la celda. Me parece que existe la método/atributo ya, pero no lo encuentro. ¿Alguien sabe? -
Hola,
respuesta a tu primera pregunta,
Para conocer la zona de impresión basta con invertir la función...LaPlage = ActiveSheet.PageSetup.PrintArea
Pero si hay varias páginas no he encontrado las limitaciones de las páginas.
Nos vemos
--
La experiencia instruye con más seguridad que el consejo. (André Gide)
Si te empeñas en un tarro y suena hueco, no es necesariamente el tarro el que está vacío. ;-) (Confucio) -
Gracias, pero personalmente no funciona. :s ¿Qué tipo de variable es "LaPlage"? He probado con Range y no quiere. LaPlage.Address = ActiveSheet.PageSetup.PrintArea tampoco funciona. Con un tipo string no muestra nada.
-
Pero no, en el rango está directamente la dirección del tipo $A$1:$G$30
--
La experiencia instruye con más seguridad que el consejo. (André Gide)
Si te golpeas en una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio) -
Es extraño, para mí hay LaPlage = "" cuando hago la macro en modo paso a paso y me sitúo encima de LaPlage (LaPlage no está declarada, sin "Option Explicit"). ¿Qué tipo es?
-
Es de tipo String, pero hay que definir ya el rango de impresión !!!
De lo contrario, ¿cómo devolver un rango que aún no existe?
--
La experiencia instruye más seguramente que el consejo. (André Gide)
Si te rompes la cabeza ante una olla y suena vacía, no necesariamente es la olla la que está vacía. ;-)(Confucio) -
Ok, funciona si definimos un rango antes:
ActiveSheet.PageSetup.PrintArea = "a1:b6"
LaPlage = ActiveSheet.PageSetup.PrintArea
Pero ¿cuál es la idea de recuperar la dirección si ya la he ingresado? :p
El rango de impresión parece estar definido cuando haces clic en "Vista previa de impresión" pero ahí la macro ya no funciona (LaPlage devuelve ""), y es con eso con lo que me gustaría que funcionara :s -
Bueno, hay que saber qué quieres y ver lo que dices...!!!
Trabajo en Visual Basic en Excel y me gustaría saber cómo obtener las “coordenadas” de la zona de impresión creada automáticamente por Excel (por ejemplo después de la Vista previa de impresión).
--
La experiencia enseña más seguramente que el consejo. (André Gide)
Si te pegas a un cubo y suena hueco, no es necesariamente el cubo el que está vacío. ;-)(Confucio) -
Sí, no veo ninguna contradicción con lo que dije...
Si hago "vista previa de impresión" y la macro :
LaPlage = ActiveSheet.PageSetup.PrintArea
LaPlage no devuelve nada. Y es únicamente la zona creada por "vista previa de impresión" la que quiero recuperar. (y eso no funciona (y no veo el interés de recuperar una dirección que acabas de teclear...)) -
Funciona efectivamente no con print previous, pero con el comando plage>> definir, funciona.
Perdón, no veo otra solución por el momento.
--
La experiencia instruye con más seguridad que el consejo. (André Gide)
Si te empeñas en un bote y suena hueco, no es necesariamente porque el bote esté vacío. ;-)(Confucio) -
Sí, me molesta que los desarrolladores de Excel no lo hayan previsto :(
Qué le vamos a hacer, supongo que lo completaremos a mano...
Gracias de todos modos por tus respuestas. -
Encontré en un sitio una función que devuelve el número de página en la que se encuentra la celda.
Esto basta para resolver mi problema. Así que me aprovecho de ello :D
------------------------
Esta función (adaptación de Frédéric Sigonneau) devuelve el
número de la página de la celda desde la que se llama :
Function NumPage() As Integer
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Wksht As Worksheet, Cellule As Range
Dim Col As Integer, Ligne As Long
Application.Volatile
Set Cellule = Application.Caller
Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
If Wksht.PageSetup.Order = xlDownThenOver Then
HPC = Wksht.HPageBreaks.Count + 1
VPC = 1
Else
VPC = Wksht.VPageBreaks.Count + 1
HPC = 1
End If
NumPage = 1
For Each VPB In Wksht.VPageBreaks
If VPB.Location.Column > Col Then Exit For
NumPage = NumPage + HPC
Next VPB
For Each HPB In Wksht.HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NumPage = NumPage + VPC
Next HPB
End Function
Luego, por ejemplo en A25 :
=NumPage()
------------------------
Es una función muy pesada (tarda más de 2 minutos para unas 100 filas (la probé solo para 10 filas) y algunos dicen que no funciona).
Si no, también existe una opción mucho más simple, pero que devuelve el número total de páginas (necesitas un libro vacío y hacer en macro un bucle añadiendo filas y esta función para obtener la página de la celda activa).
ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
(hay que sumar +1, de lo contrario falta una... no sé por qué ^^)
ejemplo: macro que escribe el número de página en la columna A para 200 filas
Sub Page()
Dim i As Integer
For i = 1 To 200
Cells(i, 1) = ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
Next i
End Sub
Pues eso espero ayudar al mayor número de personas (además de mí).
Que tengas un buen día !! :) -
hola icion,
¡Un gran agradecimiento a ti porque encontraste la pregunta y la solución!
Gracias por compartirlo con todos: ese es el objetivo del foro.
Efectivamente, usando las propiedades del área de edición debe ser factible y ciertamente hay forma de simplificar esta función para tu problema específico y voy a revisar eso si tengo un poco de tiempo.
--
Siempre zen -
Ah ! Si Laurent Longre pudiera prepararlo para nosotros en una nueva versión de morefunc.