Necesito incluir en una macro un código que distinga el área a imprimir y lo deje establecido para que la opción print de excel lo haga directamente cuando así se lo pida.
La instrucción para establecer un área de impresión es: ActiveSheet.PageSetup.PrintArea = $A$1:$D$20 Ahora, si la macro tiene que distinguir el área, lo que va a hacer es lo mismo que hacemos cuando presionamos las teclas Ctrl+Fin (buscar la última celda trabajada). Sub AreaImpresion() ' ' Macro grabada el 28/06/2003 por EMM. Dim primera, ultima As Variant Range("A1").Select If ActiveCell.Value = ?? Then Selection.End(xlToRight).Select End If primera = ActiveCell.Address ActiveCell.SpecialCells(xlLastCell).Select ultima = ActiveCell.Address ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima) End Sub Para la primera tomé A1, pero si está vacía tomará la primer celda con datos a la derecha. Con Alt+F11 llamás al Editor de VB, Insertas módulo, doble clic sobre él y copias la macro. De esta forma funciona para cualquier hoja activa. De ser necesario tendrás que incluir la ubicación de la hoja a seleccionar. Espero que sea como vos la necesitas, cualquier inconveniente me volvés a consultar.
Elsa Te agradezco la gentileza que has tenido al responderme. ¿Hice lo que me dijiste pero la macro no funciono se paro en el signo?. Aprovecho la oportunidad de precisarte mi pregunta, en el sentido de que el área de impresión que deseo definir es de la A1 hasta la J... esa es la parte variable y depende de los datos que contenga la planilla después de ser actualizada. Cordialmente mauromol
Elsa, hice lo que me dijiste y funciono, aunque selecciono una serie de lineas que estaban formateadas pero no tenían datos, hice lo sig. cpr = Cells(1, 11).Value Dim primera, ultima As Variant Range("A1").Select primera = Cells(1, 1).Address ActiveCell.SpecialCells(xlLastCell).Select ultima = Cells(cpr + 37, 10).Address ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima) Range("A1").Select End Sub No se si utilizo la notacion correcta pero funciono,dime es correcto lo que hice.la expresion cpr = Cells(1, 11).Value precisa el numero de lineas que tienen datos. Afectuosamente mauromol
Lo siento, pero cuando copio mis respuestas confeccionadas en Word algunos signos luego se distorsionan. Lo que va en lugar de las preguntas son 2 comillas, es decir le pregunto si es igual a vacío. De todos modos, con la novedad que acabas de pasarme esas 3 líneas (desde ese If hasta su End if) no van ya que siempre empieza en A1, y yo lo que hacía con esas líneas era pasar a la primer celda con datos en caso de que no sea A1. Lor lo tanto bórralas y probá de nuevo. Suerte y espero tus comentarios Elsa
En primer lugar si un usuario tiene una macro que le da resultados no hay más nada que decir. Pero probé la que me enviaste y no me da los resultados esperados. La diferencia entre tu macro y la mía es que la tuya me seleccionó hasta la celda J55 cuando yo tengo datos solo hasta la J22, es decir que para rangos menores la tuya se queda siempre en J (líneas usadas + 37), en cambio mi macro toma solo el área con información. Por supuesto que si hay celdas con bordes lo considera información. Con respecto a la instrucción cpr=Cell(1,11). value , la variable guarda el valor que hay en esa celda (por ejemplo un texto, una fecha o un importe) Creo que ahí guardas el total de líneas utilizadas, eso está bien siempre y cuando calcules bien, solo no sé entonces porqué le sumas 37. Si tenés la instrucción Range(? ¿A1?). Select la variable primera puede quedar como estaba: primera=ActiveCell.Address en lugar de decirle nuevamente que sea Cells(1,1) Las 3 líneas que quitamos eran por si la tabla comenzaba en otra columna que no sea la 1. Si definís la celda última, no será necesaria la instrucción: ActiveCell. SpecialCells(xlLastCell).Select ya que nunca tomás en cuenta esta dirección. Por lo tanto Mauromol, bastante bien lo tuyo. Mucha suerte y espero tus comentarios (no olvides que tenés que finalizar marcando una puntuación y algún comentario (si te place)