Buenos días, soy nuegvo en este foro y recurro a Uds. para solicitarles un favor
por la web conseguí la siguiente macro hecha por Ron de Bruin:
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
ExitSub
errHandler:
Exit Sub
End Sub
esta macro lo que hace es imprimir las paginas impares o pares, y esta funcionando pero lo que quiero es lo siguiente
1:saber si se puede modificar de tal manera que yo pueda seleccionar los números de paginas que quiera imprimir, aqui me refiero y esta aclaratoria es para las dos preguntas, es que una hoja puede tener varias paginas debido al salto de paginas de esa hoja;
puede ser una, dos o tres paginas las que quiera, tanto impares como pares, como lo hace el Word, que uno selecciona los números de paginas que va imprimir. Esta hoja se llama liquidación, por lo cual requiero de esto para no imprimir todas las hojas ni estar seleccionando las que voy a imprimir; en este caso hay un trabajador por pagina.
2: es también para imprimir, tengo otra hoja que se llama recibo ahí están en orden vertical todos los trabajadores que hay en la nomina, (hay 100 trabajadores, al igual a la anterior la pestaña u hoja tiene salto de paginas); es decir en una pagina hay dos trabajadores, por lo cual hay 50 paginas, lo que quiero es seleccionar al igual que la anterior lo que quiera imprimir de esa hoja.
me explico en la pagina 1 esta el recibo de ramón y juan por ejemplo. y yo solo quiero imprimir el de juan, de esa pagina y también quiero imprimir el recibo de luis que esta en la pagina 10 y el de rafael que esta en la pagina 50, se podría hacer esta macro de tal manera de no tener que imprimirlas todas ni estar seleccionando a pie como dice uno.
Hay que tomar en cuenta que cuando hablo de paginas no me estoy refiriendo a las pestañas sino a los saltos de paginas que pueda tener las hojas en cuention; en este caso la hoja Liquidacion y la hoja Recibos.
Gracias de antemano
Rafaelmvt
imagina que facilitas al programa una lista de páginas que quieras imprimir separadas por comas.
por ejemplo
1,5,6,7,10,22
la puedes pedir al usuario con inputbox, o como sea
listaseparadaporcomas=InputBox("introduce la lista separada por comas de páginas a impimir)
Ahora puedes utilizar la función Split de VBA para separar los números
paginasimprimir=Split (listaseparadaporcomas, ",")
Esto guarda en paginasimprimir una matriz con las páginas.
ahora necesitas un bucle que recorra esa matriz y vaya imprimiendo las páginas sueltas
siguiendo el ejemplo que propones...
Totalpages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
For i = LBound(paginasimprimir) To UBound(paginasimprimir)
ActiveSheet.PrintOut from:=paginasimprimir(i), to:=paginasimprimir(i), Copies:=1, Collate:=True
Next
------
Ya sé Excel, pero necesito más.
Para la segunda parte de tu pregunta, imprimir recibos que están en diferentes páginas, pero sólo en la mitad de una página
Como sólo quieres imprimir un recibo, yo creo que lo más interesante sería la opción de imprimir selección, es decir, seleccionar las celdas correspondientes a la persona que quieras e imprimir esa selección
Range(rangodeseado).Select
Selection.PrintOut
necesitarás decirle de alguna manera qué rango corresponde a cada persona, bien mediante nombres de rango, bien mediante un listado auxiliar donde busques el nombre (o el identificador que sea) y junto a él se encuentre su rango asociado.
------
Ya sé Excel, pero necesito más.
Buenos dias, offline, disculpa mi ignorancia, pero las respuestas que me has dado son para agregar esas instrucciones a la macro que tengo?, porque en verdad estos de programar en VB de excel no lo hago muy bien y quisiera saber si es asi pedirte el favor de añadir esas intrucciones y asi yo pueda copiar y pegar la macro en un modulo.
Porque de verdad no soy muy bueno en esto de macros.
Rafaelmvt
HOla
las respuestas son para crear macros nuevas basadas en la macro de ejemplo que dejaste en el primer envío.
son sólo ideas para orientarte,
no hay una única opción y hay cosas que dependen de tu criterioo de tus gustos, por ejemplo ¿cómo quieres decirle a la macro las hojas que quieres imprimir? ¿con un inputBox, leyéndolo de una celda...?
si quieres te dejo una versión, pero tampoco va a ser definitiva y siempre requerirá que la ajustes
------
Ya sé Excel, pero necesito más.
Buenos dia, seria bueno que saliera por pantalla lo que quiero imprimir, por ejemplo, que pagina se va imprimir? y uno le diga la 1-2, o la1,3,4, me explico, y no si si tambien sirve con el nombre del trabajador que esta en determinada celda, y no hay problema puedes dejarme esa version que dices tu,
Lo que pasa que este es un sistema de nomina, y a veces solo hay que imprimir x recibo de x trabajador, de tal forma que si en la nomina hay 60 trabajadores yo seleccione lo que quiero imprimir, puede ser por pagina o no se si se puede hacer por nombre del trabajador, de esta forma en una pagina que hay dos trabajadores yo pueda seleccionar solamente uno de tal forma de no imprimir el otro. Como te dije la nomina tiene 60 trabajadores, la hoja liquidacion estan uno por cada pagina (lo que quiere decir que hay 60 paginas en esa hoja liquidacion), pero en la hoja recibo estan dos por paginas (lo que quiere decir que hay 30 paginas en esa hoja recibo), entonces cada impresion lleva su copia, por eso quiero seleccionar lo que quierom imprimir para no malgastar hojas.
Si quieres me envias el ejemplo que tu tienes
Rafaelmvt
-bueno, te dejo la macro, pero no es más que lo que puse en los comentarios anteriores:
Sub ImprimeHojasSalteadas()
Dim listaseparadaporcomas, paginasimprimir, i
listaseparadaporcomas = InputBox("introduce la lista separada por comas de páginas a imprimir")
paginasimprimir = Split(listaseparadaporcomas, ",")
Totalpages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
For i = LBound(paginasimprimir) To UBound(paginasimprimir)
ActiveSheet.PrintOut from:=paginasimprimir(i), to:=paginasimprimir(i), Copies:=1, Collate:=True
Next
End Sub
------
Ya sé Excel, pero necesito más.
Buenos dias offiline, para la hoja de liquidacion esta perfecta, trabaja de maravilla, ahora me falta es para la hoja de recibo de pagos, ya que en una pagina hay dos recibos, y la idea es imprimir el recibo del trabajador o los trabajadores que seleccione.
Muchas gracias, por tu ayuda y si consigues algo para lo que me falta; me haces el favor de comunicarmelo
Gracias
Rafaelmvt
¿y cómo podemos saber dónde están los datos de cada uno?
por ejemplo yo quiero imprimir el recibo de Juan Pérez.
¿dónde está su recibo?
------
Ya sé Excel, pero necesito más.
Buenas tardes, disculpa, mi torpeza, ya la estoy enviando
esa es la hoja de recibos de pago, porque el libro es demasiado pesado
Rafaelmvt
Espero que los datos de las nóminas que has adjuntado sean ficticios...
Opción 1: si defines nombres de rango en tu hoja, sería más fácil identificar dónde están las celdas que corresponden a cada uno.
como no tenemos nombres...
Opción 2: Buscar el nombre.
Se trataría de localizar el nombre, porque el tamaño del rango que ocupa cada recibo es fijo:
desde 4 filas por encima del nombre, hasta 28 filas por debajo del nombre
y desde 1 columna a la izquierda del nombre, hasta 7 columnas a la izquierda del nombre
(por supuesto, las celdas combinadas suponen un problema y distorsionan todo un poco más, por favor, evita combinar celdas)
Si tiramos por este camino, preguntaría el nombre de la persona de quien se quiere imprimir el recibo mediante un InputBox
nombrebuscado = InputBox("Indique el nombre completo de la persona cuyo recibo desea imprimir", Título)
luego lo buscaría con el método Find
Cells.Find(nombrebuscado, ActiveCell, xlValues).Activate
y a partir de esta celda, seleccionaría el rango deseado con Offset
Range(ActiveCell.Offset(-4, -1), ActiveCell.Offset(28, 4)).Select
todo junto podría quedar similar a esto...
Sub ImprimirRecibo()
On Error GoTo TrataError
Dim nombrebuscado As String
Const Título = "Ya sé Excel, pero necesito más"
nombrebuscado = InputBox("Indique el nombre completo de la persona cuyo recibo desea imprimir", Título)
Cells.Find(nombrebuscado, ActiveCell, xlValues).Activate
'rango a imprimir (lo suyo sería definir unas constantes para el tamaño,
' por ir más rápido, pongo los números directamente)
Range(ActiveCell.Offset(-4, -1), ActiveCell.Offset(28, 4)).Select
' imprimimos
Selection.PrintOut
Exit Sub
TrataError:
MsgBox "Se produjo un error al localizar el recibo"
End Sub
------
Ya sé Excel, pero necesito más.
Buenos dias, offline, la macro funciona hasta cierto limite de los recibos, pero analizandola me he dado cuenta que todos los recibos tienen que tener separaciones iguales de tal manera que la macro sombre adecuadamente el recibo que voy a imprimir.
Ahora bien creo que tu macro hace esa funcion cuando le doy el nombre del trabajador el me sombrea el recibo y luego lo imprime, es eso correcto?
Lo que quiere decir que tengo que tener todos los recibos de pagos iguales en el sentido de la cantidad de filas, o sea que la separacion del final del primer recibo sea igual para todos tanto al principio como al final es eso cierto?
Para que funcione bien la macro?
Gracias
Rafaelmvt
eso es,
la macro localiza la celda que contiene el nombre buscado
luego selecciona el rango que ocupa el recibo para lo que he considerado (porque me pareció de un vistazo rápido que era así) que todos los recibos tenían el mismo tamaño.
Si no lo tienen, habría que detectar el patrón que sigue el tamaño de los recibos para que no se queden filas fuera de la selección.
Una vez seleccionado (por eso se sombrea), se imprime la selección
------
Ya sé Excel, pero necesito más.
Buenas noches, me lo imagine, porque tengo una macro que hace casi lo mismo, selecciona y si el patron seleccionado no es igual no funciona, de todas formas ya eso es parte mia, tratare de ajustar todos los recibos de tal manera que me queden del mismo tamaño, lo interesante es que funciona. muchas gracias, doy por finalizada la pregunta y cualquier cosa estamos en contacto
Saludos
Rafaelmvt
Buenas noches, tratare de que todos los recibos tengan el mismo patron, lo interesante es que funciona, doy por terminada la pregunta y estamos en contacto
saludos y gacias
Rafaelmvt
Buenos dias, pacomegia, te escribo por aqui, porque no tengo tu correo, mira tu me enviaste una macro para imprimir recibos de pago por nombre del trabajador pero quiero hacerte una consulta y no se como comunicarme contigo, mi correo es rafa1122000@hotmail.com, rafa1122000@gmail.com y bhmasociados@cantv.net, a cualquiera de puedes comunicarte conmigo
Rafaelmvt
Para la próxima puedes utilizar la página de contacto (mejor que poner tus correos a la vista.
------
Ya sé Excel, pero necesito más.