lunes, marzo 08, 2010

Imprimir páginas pares e impares en Excel

En estos tiempos que corren donde tiene que ser verde, es curioso que Excel no ofrezca la posibilidad de imprimir páginas pares o impares como existe en Word. Esta funcionalidad nos permite ahorrar papel imprimiendo en ambas caras de las hojas.

Podemos superar esta carencia con esta macro que Ron de Bruin publica en su página, quien a su vez cita a Gord Dibben


Sub Print_Odd_Even()
    Dim Totalpages As Long
    Dim StartPage As Long
    Dim Page As Integer
  
    On Error GoTo errHandler

    StartPage = 1  '1 = Odd and 2 = Even

    StartPage = InputBox("Ingrese 1 para impares, 2 para pares")

    Totalpages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
    For Page = StartPage To Totalpages Step 2
        ActiveSheet.PrintOut from:=Page, To:=Page, _
                             Copies:=1, Collate:=True
    Next
  
    Exit Sub
  
errHandler:
Exit Sub

End Sub



El mejor lugar para guardar esta macro es el cuaderno de macros Personal de manera que la macro siempre esté disponible. También podemos crear un icono o un atajo de teclado para lanzar la macro con facilidad.

El corazón de esta macro es la macrofunción XLM GET.DOCUMENT(50), así que agregaremos algunas palabras sobre el tema.

Como ya he publicado en el pasado las funciones macro del lenguaje XLM, que fue usado hasta la versión 5 de Excel, siguen vigentes por motivos de compatibilidad. Estas funciones nos permiten hacer tareas como por ejemplo determinar cuántas páginas a imprimir hay en un cuaderno de Excel.

28 comentarios:

  1. Pues es interesante saberlo y muy funcional; la verdad que no imprimo mucho en Excel, pero las veces que imprimía por ambas caras (casi siempre para información particular), tenía que imprimir de hoja en hoja y luego darle la vuelta.

    Saludos

    ResponderBorrar
  2. Estaba buscando algo como ésto!! muchas gracias ya lo probé me sirvió de mucho!!

    ResponderBorrar
  3. tenía que imprimir unas 800 hojas en excel y no sabía como imprimir a dos caras... la verdad que me ahorré mucho con esta macro, muy buena la verdad, se agradece.

    ResponderBorrar
  4. Muy buena, muchisimas gracias

    ResponderBorrar
  5. alguien se animaria a explicarme más graficamente como se hace esto porque no me saleeee :(

    ResponderBorrar
  6. Tienes que abrir el editor de VBa (Alt+F11). Fijate si existe el Personal.xls. No existe tienes que crearlo (fijate en esta nota o en esta otra si usas Excel 2007).
    En un módulo copias el código. Puedes definir un atajo de teclado o activar la macro desde el menú/botón de macros o con el atajo Alt+F8.

    ResponderBorrar
  7. Mue Bueno, aunque me costo un poco. Gracias!

    ResponderBorrar
  8. Buenisiisisissisimoooooo!! Gracias!!!! Gracias!!! Kayita

    ResponderBorrar
  9. Uy si funciona para los nones pero no así para los pares... alguien tiene la correcta?? Gracias!! K

    ResponderBorrar
  10. Estimada, el código publicado imprime la páginas impares. Esto está definido en esta parte del código

    StartPage = 1

    Para que imprima la impares hay que cambiar el valor de la varaiable a 2

    StartPage = 2

    ResponderBorrar
  11. Hola, en realidad lo que me sucedió fue lo sig. corrió perfecto la primera vez, seleccioné 1 e imprimió todas las páginas nones del documento, después seleccioné 2 e imprimió sólo la pág. 2, pensé que sólo funcionaba para nones pero intenté de nuevo con 1 y sólo me imprimió la pág.1, es decir, sólo corrió bien la primera vez, estoy utilizando Excel 2010, me hará falta algún comando por la versión? o hay que agregar algo a la programación?? Gracias! K

    ResponderBorrar
  12. Acabo de probar el código en Excel 2010 (el original fue desarrollado en Excel 2003) y, efectivamente, no funciona. El problema reside en la sentencia

    Totalpages =Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")

    que parece ser que Excel 2010 no reconoce.

    La solución es reemplazarla con

    Totalpages = ActiveSheet.HPageBreaks.Count

    Hice algunas pruebas y parece funcionar bien. Informame si surge algún nuevo problema.

    ResponderBorrar
  13. Una correción a mi comentario anterior:

    Totalpages = ActiveSheet.HPageBreaks.Count * ActiveSheet.VPageBreaks.Count

    calcula el número correcto de páginas a imprimir, también si hay saltos verticales.

    ResponderBorrar
  14. Q WENO ME AYUDO MUCHO...FELICIDADES

    ResponderBorrar
  15. amigo pasa que estoy imprimiendo a un pdf y al correr tu macro funciona perfectamente, pero me fabrica un archivo por cada hoja... alguna idea para corregir eso?

    ResponderBorrar
  16. No sabría decirte. Te sugiero que lo guardes como PDF y lo imprimas de ambos lados de la hoja usando las propiedades de la impresora.

    ResponderBorrar
  17. hola

    intento crear un botón que me permita indicar el numero de copias que quiero imprimir de un archivo para después crear una macro que me lo haga , y no consigo nada. alguien sabe como puedo hacerlo?

    ResponderBorrar
  18. María,
    ¿una macro que haga qué? ¿Podrías explicar un poc más lo que estás tratando de hacer?

    ResponderBorrar
  19. hola Jorge

    siento la tardanza en responder. Haber si sé explicarme. He podido hacer una macro que me imprime una hoja cuando hago click en un botón de acción. ahora, quiero saber si se puede hacer una macro que me imprima 2 o 3 hojas siempre.

    gracias por todo

    un saludo

    maria

    ResponderBorrar
  20. SI se trata de imprimir siempre 3 copias, todo lo que hay que hacer es cambiar en el código de "copies:=1" a "copies:=3".
    También se puede agregar una variable al código para que el usuario pueda pasar el número de copias a imprimir.

    ResponderBorrar
  21. hola Jorge

    Yo grabe la macro, no edite código. Crees que modificando el codigo de la macro de arriba me puede valer?

    gracias

    un saludo

    ResponderBorrar
  22. María, por supuesto. Tal como te puse en mi reuesta a tu comentario anterior.

    ResponderBorrar
  23. Buenas Tardes Amigos.

    Alguien me puede colaborar para poder modificar el código para que la impresión me aplique a todas las hojas del libro, ya que solo me aplica a la hoja en que me encuentre y necesito imprimir todas las hojas del libro y mi idea es poder imprimir en las dos caras de manera mas fácil.

    Muchas Gracias

    ResponderBorrar
  24. Tendrías que crear un loop que pase por todas las hojas del libro.

    Tendrías que declarar un variable para las hojas, por ejemplo:

    Dim wsh as Worksheet

    luego agregar el loop en esta parte

    for each wsh in activeworkbook.worksheets
    Totalpages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
    For Page = StartPage To Totalpages Step 2
    wsh.PrintOut from:=Page, To:=Page, _
    Copies:=1, Collate:=True
    Next
    next wsh

    Si usas Excel 2010 fijate en mi comentario del 19 de julio del 2012

    ResponderBorrar
  25. Muchas Gracias por la informacion

    ResponderBorrar
  26. buen dia...
    tengo un inconveniente con le codigo... si me imprime las hojas impares o pares segun seleccione... pero lo que requiero es que me imprima las hojas pares en una sola hoja, es decir, la pagina 2 y 4 van en una sola hoja, como hago para que mi impresora lo pueda hacer automaticamente.

    Nota: mi impresora si tiene la opcion de imprimir por ambos lados

    ResponderBorrar
  27. No se me ocurre ninguna forma de hacerlo.

    ResponderBorrar
  28. Muchas Gracias ...Me funciono bien al imprimir pares pero con la linea de codigo de la primera correccion.

    Totalpages = ActiveSheet.HPageBreaks.Count
    Genssel

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.