Imprimir páginas pares e impares en Excel

lunes, marzo 08, 2010

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 comments:

Anónimo,  08 marzo, 2010 20:25  

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

Anónimo,  20 mayo, 2010 18:10  

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

Anónimo,  20 mayo, 2010 18:14  

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.

Anónimo,  01 septiembre, 2010 18:41  

Muy buena, muchisimas gracias

Anónimo,  25 marzo, 2011 21:14  

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

Jorge L. Dunkelman 26 marzo, 2011 00:45  

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.

Anónimo,  03 junio, 2012 01:59  

Mue Bueno, aunque me costo un poco. Gracias!

Anónimo,  18 julio, 2012 06:04  

Buenisiisisissisimoooooo!! Gracias!!!! Gracias!!! Kayita

Anónimo,  18 julio, 2012 06:15  

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

Jorge L. Dunkelman 18 julio, 2012 18:21  

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

Anónimo,  19 julio, 2012 02:05  

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

Jorge L. Dunkelman 19 julio, 2012 09:29  

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.

Jorge L. Dunkelman 19 julio, 2012 10:34  

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.

Leonid Davila 19 diciembre, 2012 23:30  

Q WENO ME AYUDO MUCHO...FELICIDADES

Juan Carlos Sangacha Ortiz 02 mayo, 2014 23:06  

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?

Jorge Dunkelman 03 mayo, 2014 17:42  

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.

Maria Porral 23 julio, 2014 02:38  

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?

Jorge Dunkelman 23 julio, 2014 11:14  

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

Maria Porral 30 julio, 2014 21:13  

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

Jorge Dunkelman 31 julio, 2014 07:19  

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.

Maria Porral 31 julio, 2014 18:14  

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

Jorge Dunkelman 02 agosto, 2014 09:47  

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

Darío Fernando Narváez Guevara 25 septiembre, 2014 20:40  

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

Jorge Dunkelman 26 septiembre, 2014 15:33  

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

lirioleo 05 enero, 2015 18:23  

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

Jorge Dunkelman 06 enero, 2015 07:23  

No se me ocurre ninguna forma de hacerlo.

Anónimo,  12 enero, 2015 20:34  

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

Totalpages = ActiveSheet.HPageBreaks.Count
Genssel

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP