Macro para bloquear u ocultar columnas según la condición de una celda de la misma hoja

Tengo el siguiente escenario:

Se cuenta con un formato, en Excel, de varias columnas (16) que servirá para que 4 plantas lo usen, el detalle es que no todas las columnas aplican para todas las plantas, por lo que se necesita que cuando se digite en la celda A1 el nombre de una de las plantas, automáticamente se bloqueen o en todo caso se oculten las columnas que no aplican a esa planta, con el objetivo que el operador solo llene las columnas adecuadas.

Se debe tener en cuenta que si digito la Planta 1 se bloquearán u ocultarán ciertas columnas y si cambio a la planta 2 tendría que partir de cero, porque podrían haber columnas que fueron bloqueadas que ahora serán usadas y viceversa.

1 respuesta

Respuesta
1

Para preparar la macro, puedes poner por cada planta qué columnas van a quedar visibles.

Si tú quieres se puede hacer que las columnas, además de ocultas también queden protegidas, esto para evitar que las muestren y las modifiquen. Si las quieres bloqueadas, es necesario que la hoja se proteja.

Entonces escribe las columnas por planta y si quieres proteger la hoja.

Gracias por la pronta respuesta, la relación de celdas visibles por planta es la siguiente:

Planta 1: A,B,C,D,E,F,K,L,M,N,O,S

Planta 2: A,G,H,K,L,M,N,O,R,S

Planta 3:A,I,J,K,L,M,N,O,S

Planta 4: A,I,J,K,L,M,N,O,S

Sería ideal proteger la hoja.

Pon el siguiente código en los eventos de tu hoja

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        If Target.Value = "" Then Exit Sub
        If Target.Count > 1 Then Exit Sub
        '
        Application.ScreenUpdating = False
        ActiveSheet.Unprotect
        Columns("A:S").Locked = True
        Columns("A:S").EntireColumn.Hidden = True
        existe = True
        Select Case LCase(Target.Value)
            Case "planta 1": cols = Array("A", "B", "C", "D", "E", "F", "K", "L", "M", "N", "O", "S")
            Case "planta 2": cols = Array("A", "G", "H", "K", "L", "M", "N", "O", "R", "S")
            Case "planta 3": cols = Array("A", "I", "J", "K", "L", "M", "N", "O", "S")
            Case "planta 4": cols = Array("A", "I", "J", "K", "L", "M", "N", "O", "S")
            Case Else: existe = False
        End Select
        If existe Then
            For j = UBound(cols) To LBound(cols) Step -1
                Columns(cols(j)).EntireColumn.Hidden = False
                Columns(cols(j)).Locked = False
            Next
        Else
            Columns("A:S").EntireColumn.Hidden = False
        End If
        ActiveSheet.Protect
        Application.ScreenUpdating = True
        Range("A1").Select
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)

4. En el panel del lado derecho copia la macro


Cada que captures la planta en la celda A1, en automático se desprotege la hoja, se ocultan las columnas, se ponen visibles las columnas de acuerdo a la relación y se protege la hoja.


.

.

Estuve intentando pero cuando intento elegir la planta en la celda A1 (tiene validación de datos para elegir la planta) me sale error 1004, dice que no se puede asignar la propiedad locked de la clase  Range, y subraya de amarillo el siguiente código: 

Columns(cols(j)).Locked = False

¿Protegiste la hoja? ¿Tiene password? ¿Tienes columnas combinadas?

Envíame tu archivo para revisarlo

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “paulo montoya

Tenía columnas combinadas, ya modifiqué las columnas y me funcionó a la perfección el código que elaboraste. Por un momento no me funcionaba pero al parecer era porque edité los nombres de las plantas para tengan mayúsculas, pero parece que no lo lee así. Ahora que lo deje con minúsculas funciona a la perfección.

Muchas gracias dante, fuiste de gran ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas