Esta vez les mostrare una forma de bloquear celdas según condición en excel, Ocasionalmente al diseñar tus Aplicaciones Excel es necesario asegurarse que algunas celdas estén bloqueadas para edición, esto con el fin de asegurarse que no se eliminen formulas o para evitar que se ingresen datos donde no se debe.
Bloquear celda según texto ingresado en otra celda
La idea básica es que al ingresar cierto texto en una columna determinada en la celda de la misma fila pero en otra columna sea bloqueada.
En este caso particular al ingresar el texto “Entrada”, la celda en la misma fila pero de la columna Cant. Salida sea bloqueada y “Cant. Entrada” quede libre para editar.
Desbloquear todas las celdas de la hoja
Para que el bloqueo y desbloqueo de celdas funcione de manera automática con una macro, primero es necesario desbloquear todas las celdas de la hoja, esto es porque en el proceso se protegerá la hoja, de manera predeterminada todas las celdas están bloqueadas, es por eso que cuando se protege la hoja todas las celdas quedan sin acceso para edición.
Para desbloquear todas las celdas siga este procedimiento.
1.- seleccionar todas las celdas de la hoja.
2.- Click derecho dentro de la selección / Formato de celdas / Proteger … Desactivar la casilla “bloqueada” / Aceptar
Macro para proteger celdas según condición en Excel
Una vez que se han desbloqueado todas las celdas, procedemos a escribir el código de la macro que realizara el trabajo.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Isect As Range
Set Isect = Application.Intersect(Target, Range("RangoTipo"))
If Not Isect Is Nothing Then
If Isect = "Entrada" Then
ActiveSheet.Unprotect "123"
Isect.Offset(0, 1).Locked = False
Isect.Offset(0, 2).Locked = True
Call ProtejeHoja
ElseIf Isect = "Salida" Then
ActiveSheet.Unprotect "123"
Isect.Offset(0, 1).Locked = True
Isect.Offset(0, 2).Locked = False
Call ProtejeHoja
Else
MsgBox "Solo puede indicar Entrada o Salida"
End If
End If
End Sub
Para insertar esta macro de evento en la hoja, solo de click derecho en la pestaña con el nombre de la hoja y luego click en ver código.
Al ser una macro de evento, esta se desencadena cuando algo sucede, en este caso es cuando se hace algún cambio en las celdas de la hoja, la macro comprobara primero si el cambio fue realizado en la columna B a partir de la fila 2, luego comprueba si el texto ingresado es “Entrada” o “Salida”, en cuyo caso bloqueara o desbloqueara las celdas que correspondan.
Proteger hoja
Cuando se ingresa ya sea el texto Entrada o Salida, se procede a bloquear y desbloquear las celdas que correspondan, pero también es necesario proteger la hoja para el bloqueo de las celdas tenga efecto real.
En la macro de evento se llama a la función ProtejeHoja
, esta función la vamos a poner en un modulo normal.
Sub ProtejeHoja()
ActiveSheet.Protect Password:="123", DrawingObjects:=True, Contents:=True, AllowFormattingCells:=True, _
AllowFormattingColumns:=True, AllowFormattingRows:=True
End Sub
Esa funciones protege la hoja activa con la contraseña “123”, pero deja algunas opciones disponibles como es dar formato a las celdas.
Como se ha podido observar, la macro no es muy complicada, ademas, al ser tan sencilla no debería ser problema para que la adaptes a tus necesidades particulares.
Espero tus comentarios y nos vemos en el próximo post.