¿Cómo hacer para que el área de impresión se la última celta escrita?

Como mis conocimientos de VBA son más bien escasos tengo un problemilla que no se resolver.
Me he hecho un pequeño código para imprimir una hoja de excel que es una tabla dinámica,(resumen de ventas por vendedor) como suele suceder en estos casos uno tiene 9 lineas otro 15 y otro 25, lo que quiero es que siempre me imprima hasta la ultima linea que tenga algo escrito, pues aquí esta el problema por que justo al lado de la tabla tengo una columna con un condicional donde calculo el % de diferencia entre los dos años ( =SI(C20<>"";SI(D20<>"";SI(C20=0;100%;SI(D20=0;-100%;(D20/C20)-100%));-100%);""))en el código que os adjunto veréis que lo que busco es la ultima celda activa y excel entiende como activas todas las celdas que tienen este condicional,(¿389) sabría alguien como debo proceder para que busque la ultima escrita y no la ultima activa?
Mil gracias de Antemano
----------------------------------------
Sub AreaDimpresio()
'Netejo l'area
ActiveSheet.PageSetup.PrintArea = ""
'Selecciono A1
rango1 = Range("A1").Select
rango1 = Selection.Address
'selecciono l'ultima
rango2 = Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
rango2 = Selection.Address
' omplo l'area d'impresio i mostro el missatge
Ans = MsgBox("Se va a imprimir el rango" & " " & rango2, vbYesNo)
' pregunto si o no
'si es "si" imprimeixo
If Ans = vbYes Then
ActiveSheet.PageSetup.PrintArea = rango1rango2
' Imprimeix el rango
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'si es "no" borro l'area
Else
ActiveSheet.PageSetup.PrintArea = ""
End If
End Sub

1 Respuesta

Respuesta
1
Si sabés cuál es tu última columna sin considerar la que tiene el condicional, debieras utilizar este dato.
Las instrucciones que reemplazan a la selección del rango2:
'selecciono l'ultima
fila = Range("I65536").End(xlUp).Row
rango2 = Range(Selection, Cells(fila, 9)).Select
Luego sigue la tuya:
rango2 = Selection.Address
También ajustá la instrucción de impresión:
ActiveSheet.PageSetup.PrintArea = rango2
En este ejemplo estoy considerando que la últ col es I
Saludos y si queda algo pendiente escribime nuevamente.
Hola Elsa, ¿gracias por la respuesta pero sigue sin funcionar puede ser que tengo el excel 2003?
La instrucción ha quedado de la siguiente manera
----------------------------------
Sub AreaDimpresio()
'Netejo l'area
ActiveSheet.PageSetup.PrintArea = ""
'Selecciono A1
rango1 = Range("A1").Select
rango1 = Selection.Address
'selecciono l'ultima
fila = Range("e65536").End(xlUp).Row
rango2 = Range(Selection, Cells(fila, 5)).Select
rango2 = Selection.Address
' omplo l'area d'impresio i mostro el missatge
Ans = MsgBox("Se va a imprimir el rango" & " " & rango2, vbYesNo)
' pregunto si o no
'si es "si" imprimeixo
If Ans = vbYes Then
ActiveSheet.PageSetup.PrintArea = rango2
' Imprimeix el rango
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'si es "no" borro l'area
Else
ActiveSheet.PageSetup.PrintArea = ""
End If
End Sub
----------------------------------------
Gracias de nuevo por tu paciencia
PD: Lo que te pedí tengo que esperar por "la cuesta de septiembre" jejejeje los padres separados ya se sabe ... jejejje
La rutina está bien y podes solicitarme el ejemplo a mi correo. Quizás viendo la hoja (en Excel 2003) reparemos dónde está el problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas