lunes, 15 de noviembre de 2010

VBA: ocultar columnas según valor en un área de impresión.

Para automatizar la petición de un lector sobre la forma de definir un área de impresión condicionada al valor de unas celdas desarrollaré una macro sencilla de aplicar:

...Tengo un Excel y no quiero imprimir las columnas que tienen importe cero en una columna.
He pensado poner el ancho de las columnas a cero.
¿Hay alguna manera de hacerlo automáticamente?...


Supondremos que los valores 'cero' que determinan si debe aparecer o no en la impresión se encuentran en la primera fila del área que seleccionaremos.

El código siguiente se incluirá dentro del editor de VBA (Alt+F11) en un módulo, como cualquier otra macro que deseemos ejecutar, lo que nos permitirá ejecutarla en cualquier hoja activa de nuestro libro de Excel:

'código VBA que define el área de impresión.
Sub Macro1()
Dim RngAdI As Range
Set RngAdI = Application.InputBox _
(Prompt:="Selecciona el área de impresión", Title:="Área de impresión", Type:=8)

ultcelda = Range("XFD1").End(xlToLeft).Column
primerafila = RngAdI.Row

For c = 1 To ultcelda
If Cells(primerafila, c).Value = 0 Then
Columns(Cells(primerafila, c).Column).EntireColumn.Hidden = True
ActiveSheet.PageSetup.PrintArea = RngAdI.Address
End If
Next
End Sub


Con este proceso conseguimos que se evalue la primera fila del rango seleccionado, de tal forma que cuando el valor de las celdas de dicha fila sea 'cero' se proceda a ocultar la columna correspondiente; dejando por último, dicha área seleccionada como el área de impresión

No hay comentarios:

Publicar un comentario en la entrada