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.
Jason dice
Hola, muy buen video, tengo una consulta. ¿Será posible que además de bloquear la celda se aplique algún formato en específico? Lo que quisiera es que las celdas que quedan bloqueadas aparezcan en negro.
Saludos
Anonimo dice
Buen aporte , pero solo bloquea una celda a la derecha , pero yo necesito una macro cuando en la celda C10 yo escriba cualquiera de las letras: T; F; NE, ó R todas las celdas que estén a la derecha en la misma fila se deben bloquear y cuando yo escriba en la celda C10 la letra “A” todas las celdas que están a la derecha de la misma fila se deben desbloquear, todo este proceso debe ocurrir en en el rango de columna : C10: C49, es decir cualquier celda que este dentro de este rango que contenga lo antes mencionado se debe ejecutar una macro
Jorge Preciado dice
Buenas noches excelente la explicación, sin embargo solicito una ayuda si es posible… tengo lo siguiente
– Celda B2 con lista desplegable con números (1.2.4.5.6)
– Celda C2 con lista desplegable con números (2.3.7.8)
– Celda D2 con lista desplegable con números (2.9.10.11.12)
Quisiera ayuda que cada ves que seleccione un numero de B2 en E2 se habilitara la celda… o si selecciono dos listas desplegables se habiliten E2 y F2 y asi si selecciono las tres
Me podrian dar una manito por favor???? mil gracias
omar dice
Buenos dias muy bien explicado , sin embargo yo tengo una lista donde el producto es “fisico” o “digital” y segun lo que se seleccione se debe bloquear / habilitar una celda en particular que despliega datos para opciones fisica y otra que despliega datos para opciones digitales, bien lo podria hacer por validacion de datos o con indirecto pero resulta que ya es funcion la utilizo para el despliegue de la lista hasta ahora no se como bloquearla ya que tu ejemplo es si “alguien escribe”, quisiera saber como aplciarlo para que alguien seleccione de una lista gracias muy bien explicado
Javier dice
Mi problema es que he creado un “cuadro combinado” y si bloqueo la “celda vinculada”, no puede funcionar ya que no puede variar su valor.
He puesto el color de texto igual al fondo con lo cual no se ve, pero eso no impide que se pueda reescribir.
Supongo que la solución pasa por poner estos valores en otra hoja y ocultarla, pero ¿hay alguna forma “más sencilla”?
Gracias
Abril Rachel Márquez E dice
Mil gracias, ayer por la tarde no sabía nada relacionado con ésto y después de algunas horas por fin conseguí lo que quería; llenar una lista y dependiendo si el tipo de persona era física o moral se habilitaran o deshabilitaran 3 columnas para capturar una información. Intenté muchas veces y me desesperé un poco pero al leer y ver el video una y otra vez por fin lo logré. Cabe mencionar que así como no sabía nada del bloqueo mucho menos sabía de macros y códigos; solo sabía hacer sumas, restas, multiplicaciones y divisiones y cambiar el color de las celdas. Mil gracias 🙂
Nolberto Lopez dice
Buenos dias Abril.
Me da mucho gusto que haya realizado su propósito, estoy seguro que ahora se siente muy orgullosa de lograr algo nuevo, esto le dará un impulso para ir consiguiendo mas cosas.
Danilo Zepeda dice
Excelente ejercicio.
Saludos!!
Oscar López dice
Cómo se puede proteger una hoja de Microsoft Excel para que las columnas y celdas bloqueadas no se desbloqueen al abrir el archivo en Google Docs
Jesus dice
Aprendiendo macros para mi desarrollo profesional.
FAUSTINO CASTILLO dice
Excelente apoyo para el control de caja