Área de impresión

Respuesta de
a
Usuario
Estimados expertos:
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
Avatar
Experto
Hola:
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.

Elsa

http://es.geocities.com/lacibelesdepunilla/macros
Usuario
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
Avatar
Experto
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.

Saludos
Elsa

http://es.geocities.com/lacibelesdepunilla/macros
Usuario
Mil gracias Elsa eres tan amable que casi no se puede creer.