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

2 comentarios:

  1. Una pregunta si requiero que el rango ingresado con el box ya sea fijo como debo cambiar

    ResponderEliminar
    Respuestas
    1. Hola, qué tal estás?
      Un placer saludarte

      La acción de ocultar columnas es mediante:
      .EntireColumn.Hidden = True

      Si quieres ocultar siempre las mismas columnas, entonces, podría ser:
      Range("A:C").EntireColumn.Hidden = True

      Saludos cordiales

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.