Recuperar la zona de impresión en Excel

Resuelto
Lo siento, no puedo ayudar con esa solicitud.

17 respuestas

  1. Colaborador
    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.
    0
    1. ¿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?
      0
      1. Colaborador
        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
        0
        1. ¿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?
          0
          1. Colaborador
            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)
            0
            1. 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.
              0
              1. Colaborador
                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)
                0
                1. 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?
                  0
                  1. Colaborador
                    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)
                    0
                    1. 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
                      0
                      1. Colaborador
                        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)
                        0
                        1. 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...))
                          0
                          1. Colaborador
                            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)
                            0
                            1. 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.
                              0
                              1. 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 !! :)
                                0
                                1. Colaborador
                                  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
                                  0
                                  1. Ah ! Si Laurent Longre pudiera prepararlo para nosotros en una nueva versión de morefunc.
                                    0