Excel. Tengo 3 columnas. Si en A5, tienen valor 0 bloqueen el rango A6:A38 y si A5 tiene valor "C3", permanezca desbloqueada.

Excel. Tengo 3 columnas. Si en A5, tienen valor "NO" bloqueen el rango A6:A38 y si A5 tiene valor "SI", permanezca desbloqueada el rango A6:A38. En forma análoga, en la misma hoja, si B5 tiene valor "NO" bloqueen el rango B6:B38 y si B5 tiene valor "SI" permanezca desbloqueada el rango B6:B38 también, si C5 tiene valor "NO" bloqueen el rango C6:C38 y si C5 tiene valor "SI" permanezca desbloqueada el rango C6:C38.

1 respuesta

Respuesta
2

H o l a:

Te anexo un par de macros.

La primera macro funciona si capturas los datos en las celdas A5, B5 y C5

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 3 Then Exit Sub
    If Not Intersect(Target, Range("A5, B5, C5")) Is Nothing Then
        ActiveSheet.Unprotect "abc"
        Range("A6:C38").Locked = False
        If [A5] = "NO" Then Range("A6:A38").Locked = True
        If [B5] = "NO" Then Range("B6:B38").Locked = True
        If [C5] = "NO" Then Range("C6:C38").Locked = True
        ActiveSheet.Protect "abc", DrawingObjects:=False, Contents:=True, _
            Scenarios:=False, AllowFormattingCells:=True, _
            AllowFormattingColumns:=True, AllowFormattingRows:=True, _
            AllowSorting:=True, AllowFiltering:=True, _
            AllowUsingPivotTables:=True
    End If
End Sub


La segunda macro es en caso de que en las celdas A5, B5, y C5 tengas fórmulas:

Private Sub Worksheet_Calculate()
'Por.Dante Amor
    ActiveSheet.Unprotect "abc"
    Range("A6:C38").Locked = False
    If [A5] = "NO" Then Range("A6:A38").Locked = True
    If [B5] = "NO" Then Range("B6:B38").Locked = True
    If [C5] = "NO" Then Range("C6:C38").Locked = True
    ActiveSheet.Protect "abc", DrawingObjects:=False, Contents:=True, _
        Scenarios:=False, AllowFormattingCells:=True, _
        AllowFormattingColumns:=True, AllowFormattingRows:=True, _
        AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
End Sub

Pon la macro que necesites en los eventos de tu hoja.

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

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

En las celdas A5; B5 y C5 son referencias a otras celdas; es decir según otra condición estas cambian a SI o a NO, entonces uso la segunda forma?; también sería posible que si en A5, tienen valor "NO" bloqueen el rango A6:A38  ,  B6:B38   y C6:C38, (porque al final es lo mismo)  Es decir, simplificando, las celdas con referencias A5, B5 y C5 solo cumplen estas condiciones   NO NO NO , SI NO NO  ; SI SI NO  y  SI SI SI ( Ya no existe otra posibilidad según criterios) la condición es que el rango debajo de NO quede inhabilitada para introducir cantidades o si los hay los borre; y si fuera posible que quede sombrada con una trama en cambio cuando sea SI,  quede desbloqueada y sin trama. Muy agradecido por tu tiempo y trabajo...

Hice los pasos al ejecutar me pide nombre de la macro....

me pide crear macro y luego se activa un modulo... 

Amigo, ya pude correr la macro, pero parece que no corre como quiero, tal vez me explique mal. La forma NO NO NO en las celdas A5, B5 y C5, bloquean las 3 columnas debajo de éstas, funciona bien. Si las celdas A5, B5 y C5 tienen los valores SI, NO, NO me permite introducir valores en el rango debajo de A5  mientras que las de, B5 y C5 están bloqueadas hasta ahí bien  Ahora cuando la celdas A5, B5 y C5 tienen los valores SI, SI, NO  me permite ingresar valores  debajo del rango de A5, hasta aquí bien,  pero las del rango debajo  de B5 permanecen bloqueadas, cuando deberían estar editables, pero la macro las bloquea (?),es decir, para este caso el rango debajo de las celdas  A5 y B5 deben estar desbloqueadas y las C5 permanecer bloqueada; y por último si las celdas A5, B5 y C5, tienen la forma SI SI SI, deben estar todas las columnas debajo de éstas desbloqueadas. disculpa la molestia y gracias de antemano... 

Disculpe, tuve un error al aplicar la macro, funciona bien; lo que solo se me olvidó, es que si un rango es bloqueado, cualquier valor  contenido en ésta se borre, mas no el formato condicional, ademas que notifique que cuando no se puede ingresar datos que se visualice: "lo sentimos, no puede ingresar datos". Gracias una vez más.

Te anexo la macro para borrar el contenido de las celdas cuando se bloquean

Private Sub Worksheet_Calculate()
'Por.Dante Amor
    ActiveSheet.Unprotect "abc"
    Range("A6:C38").Locked = False
    If [A5] = "NO" Then
        Range("A6:A38").Locked = True
        Range("A6:A38").ClearContents
    End If
    If [B5] = "NO" Then
        Range("B6:B38").Locked = True
        Range("B6:B38").ClearContents
    End If
    If [C5] = "NO" Then
        Range("C6:C38").Locked = True
        Range("C6:C38").ClearContents
    End If
    ActiveSheet.Protect "abc", DrawingObjects:=False, Contents:=True, _
        Scenarios:=False, AllowFormattingCells:=True, _
        AllowFormattingColumns:=True, AllowFormattingRows:=True, _
        AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
End Sub

Para el mensaje de error habría que hacer otra macro.  Con mucho gusto te ayudo con todas tus peticiones.

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

He adecuado la macro de la forma siguiente:

Private Sub Worksheet_Calculate()
'Por.Dante Amor
ActiveSheet.Unprotect "1234"
Range("I12:k43").Locked = False
If [I11] = "0" Then Range("I12:I43").Locked = True
If [J11] = "0" Then Range("J12:J43").Locked = True
If [K11] = "0" Then Range("K12:K43").Locked = True
Range("I65:K96").Locked = False
If [I11] = "0" Then Range("I65:I96").Locked = True
If [J11] = "0" Then Range("J65:J96").Locked = True
If [K11] = "0" Then Range("K65:K96").Locked = True
Range("I118:k149").Locked = False
If [I11] = "0" Then Range("I118:I149").Locked = True
If [J11] = "0" Then Range("J118:J149").Locked = True
If [K11] = "0" Then Range("K118:K149").Locked = True
Range("I171:k202").Locked = False
If [I11] = "0" Then Range("I171:I202").Locked = True
If [J11] = "0" Then Range("J171:J202").Locked = True
If [K11] = "0" Then Range("K171:K202").Locked = True
ActiveSheet.Protect "1234", DrawingObjects:=False, Contents:=True, _
Scenarios:=False, AllowFormattingCells:=True, _
AllowFormattingColumns:=True, AllowFormattingRows:=True, _
AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
End Sub

'' Lo que necesito es que cuando se bloqueen los rangos borren cualquier contenido que estén en éstas.... 

He adecuado la macro enviada a la forma siguiente:

Private Sub Worksheet_Calculate()
'Por.Dante Amor
ActiveSheet.Unprotect "1234"
Range("I12:k43").Locked = False
If [I11] = "0" Then Range("I12:I43").Locked = True
If [J11] = "0" Then Range("J12:J43").Locked = True
If [K11] = "0" Then Range("K12:K43").Locked = True
Range("I65:K96").Locked = False
If [I11] = "0" Then Range("I65:I96").Locked = True
If [J11] = "0" Then Range("J65:J96").Locked = True
If [K11] = "0" Then Range("K65:K96").Locked = True
Range("I118:k149").Locked = False
If [I11] = "0" Then Range("I118:I149").Locked = True
If [J11] = "0" Then Range("J118:J149").Locked = True
If [K11] = "0" Then Range("K118:K149").Locked = True
Range("I171:k202").Locked = False
If [I11] = "0" Then Range("I171:I202").Locked = True
If [J11] = "0" Then Range("J171:J202").Locked = True
If [K11] = "0" Then Range("K171:K202").Locked = True
ActiveSheet.Protect "1234", DrawingObjects:=False, Contents:=True, _
Scenarios:=False, AllowFormattingCells:=True, _
AllowFormattingColumns:=True, AllowFormattingRows:=True, _
AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
End Sub

Desearía que una vez bloqueados los rangos borren cualquier contenido en éstas.

La macro que te envié funciona con tu primer petición.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas