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
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
- Abre tu libro de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
- 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...
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.
- Compartir respuesta