Note: The other languages of the website are Google-translated. Back to English

¿Cómo bloquear o desbloquear celdas según los valores en otra celda en Excel?

En algunos casos, es posible que deba bloquear o desbloquear celdas según los valores de otra celda. Por ejemplo, necesita que el rango B1: B4 se desbloquee si la celda A1 contiene el valor "Aceptando"; y debe bloquearse si la celda A1 contiene el valor "Rechazar". ¿Cómo puedes hacer para lograrlo? Este artículo te puede ayudar.

Bloquear o desbloquear celdas según los valores en otra celda con código VBA


Bloquear o desbloquear celdas según los valores en otra celda con código VBA

El siguiente código de VBA puede ayudarlo a bloquear o desbloquear celdas según el valor en otra celda en Excel.

1. Haga clic con el botón derecho en la pestaña de la hoja (la hoja con celdas que necesita bloquear o desbloquear según los valores de otra celda) y haga clic en Ver código desde el menú contextual.

2. Luego copie y pegue el siguiente código VBA en la ventana Código.

Código VBA: bloquee o desbloquee celdas según los valores en otra celda

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") = "Accepting" Then
        Range("B1:B4").Locked = False
    ElseIf Range("A1") = "Refusing" Then
        Range("B1:B4").Locked = True
    End If
End Sub

3. presione el otro + Q teclas simultáneamente para cerrar el Microsoft Visual Basic para aplicaciones ventana.

De ahora en adelante, cuando ingresa el valor "Aceptando" en la celda A1, el rango B1: B4 se desbloquea.

Al ingresar el valor "Rechazar" en la celda A1, el rango especificado B1: B4 se bloquea automáticamente.


Artículos relacionados:


Las mejores herramientas de productividad de oficina

Kutools para Excel resuelve la mayoría de sus problemas y aumenta su productividad en un 80%

  • Reutilizar: Inserte rápidamente fórmulas complejas, gráficos y cualquier cosa que hayas usado antes; Cifrar celdas con contraseña; Crear lista de distribución y enviar correos electrónicos ...
  • Barra de súper fórmula (edite fácilmente varias líneas de texto y fórmulas); Diseño de lectura (leer y editar fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas sin perder datos; Contenido de celdas divididas; Combinar filas / columnas duplicadas... Prevenir celdas duplicadas; Comparar rangos...
  • Seleccione Duplicado o Único Filas; Seleccionar filas en blanco (todas las celdas están vacías); Super Find y Fuzzy Find en muchos libros de trabajo; Selección aleatoria ...
  • Copia exacta Varias celdas sin cambiar la referencia de la fórmula; Crear referencias automáticamente a varias hojas; Insertar viñetas, Casillas de verificación y más ...
  • Extraer texto, Agregar texto, Eliminar por posición, Quitar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtros a otras hojas); Orden avanzado por mes / semana / día, frecuencia y más; Filtro especial en negrita, cursiva ...
  • Combinar libros y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes de xls, xlsx y PDF...
  • Más de 300 potentes funciones. Compatible con Office/Excel 2007-2021 y 365. Compatible con todos los idiomas. Fácil implementación en su empresa u organización. Funciones completas Prueba gratuita de 30 días. Garantía de devolución de dinero de 60 días.
pestaña kte 201905

Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil

  • Habilite la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!
officetab parte inferior
Comentarios (52)
Aún no hay calificaciones. ¡Sé el primero en calificar!
Este comentario fue minimizado por el moderador en el sitio
¿Cómo se puede bloquear/desbloquear una celda variable, por ejemplo, cuando la celda es [=ÍNDICE(A16:L35,COINCIDIR(W5,A16:A35,0),COINCIDIR("PAGAR",A16:L16,0))]
Este comentario fue minimizado por el moderador en el sitio
Quiero un comando VBA simple que no puedo descifrar, por favor ayuda
Si la celda A1 es Balnk, entonces la celda A2 está bloqueada y si la celda A1 contiene algún valor, entonces la celda A2 está desbloqueada
Del mismo modo, si la celda A2 está en blanco, la celda A3 está bloqueada y si la celda A2 contiene algún valor, la celda A3 está desbloqueada.
y así sucesivamente tantas celdas como se requiera en cualquier parte de la hoja.
Este comentario fue minimizado por el moderador en el sitio
Hola, estoy tratando de lograr esto, pero aparece un error que indica que VBA no puede establecer la propiedad Locked de la clase Range si la hoja ha sido protegida. Desproteger la hoja anulará el bloqueo de la celda. Cómo evitar esto? Gracias por cualquier ayuda.
Este comentario fue minimizado por el moderador en el sitio
¿Resolviste? Tengo el mismo problema
Este comentario fue minimizado por el moderador en el sitio
Estimado Memo,
Intente con el siguiente código VBA.

Hoja de trabajo privada Sub_Activate ()
Si no es ActiveSheet.ProtectContents, entonces
Rango ("A1"). Bloqueado = Falso
Rango ("B1: B4"). Bloqueado = Falso
Si terminar
End Sub
Sub hoja de trabajo privada_Cambio de selección (rango de destino ByVal)
Dim xRg como rango, xRgA como rango
On Error Resume Next
Application.EnableEvents = False
Establecer xRg = Rango ("B1: B4")
Establecer xRgA = Rango ("A1")
If Intersect(Target, xRg).Address <> Target.Address _
O xRgA = "Aceptar" Entonces
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
E Intersecar(Objetivo, xRg) = Objetivo _
Y xRgA.Value = "Rechazar" Entonces
xRgA.Seleccionar
Si terminar
Application.EnableEvents = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
Querrá usar la línea de interfaz en el libro de trabajo para que cuando abra el archivo, proteja las hojas pero permita que las macros hagan cambios de todos modos;

Private Sub Workbook_Open() 'Esto va en "ThisWorkbook"

Hojas de trabajo ("Herramienta de pedido"). Contraseña de protección: = "Pwd", UserInterFaceOnly: = True

End Sub
Este comentario fue minimizado por el moderador en el sitio
Querida hormiga,
El siguiente código de VBA puede ayudarlo a resolver este problema. Gracias por tu comentario.

Hoja de trabajo privada Sub_Activate ()
Si no es ActiveSheet.ProtectContents, entonces
Rango ("A1"). Bloqueado = Falso
Rango ("B1: B4"). Bloqueado = Falso
Si terminar
End Sub
Sub hoja de trabajo privada_Cambio de selección (rango de destino ByVal)
Dim xRg como rango, xRgA como rango
On Error Resume Next
Application.EnableEvents = False
Establecer xRg = Rango ("B1: B4")
Establecer xRgA = Rango ("A1")
If Intersect(Target, xRg).Address <> Target.Address _
O xRgA = "Aceptar" Entonces
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
E Intersecar(Objetivo, xRg) = Objetivo _
Y xRgA.Value = "Rechazar" Entonces
xRgA.Seleccionar
Si terminar
Application.EnableEvents = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola,

¿Es posible que este VBA bloquee un conjunto de celdas/desbloquee otro en función de esto? Por ejemplo, ¿el rango B1: B4 está desbloqueado y C1: C4 está bloqueado para "aceptar" y luego B1: B4 está bloqueado y C1: C4 está desbloqueado para "rechazar"?


Gracias,
cristiano
Este comentario fue minimizado por el moderador en el sitio
Querido Christian,
¿Está protegida su hoja de trabajo?
Este comentario fue minimizado por el moderador en el sitio
por favor alguien me puede ayudar con lo siguiente.
Quiero insertar fotos de estudiantes en una hoja, aparece en otra hoja según sus nombres
Para crear un avión de navegación para ayudar a los usuarios
Para asignar una(s) hoja(s) particular(es) a un usuario
Para crear una interfaz para el libro
Para crear una página de inicio de sesión
Este comentario fue minimizado por el moderador en el sitio
Estimado Leo,
Cualquier pregunta sobre Excel, no dude en publicarla en nuestro foro: https://www.extendoffice.com/forum.html.
Obtendrá más soporte sobre Excel de nuestro profesional de Excel.
Este comentario fue minimizado por el moderador en el sitio
Hola,

Probé tu código y lo edité un poco, pero no puedo averiguar qué es lo que hago mal aquí.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Rango("A40") <> "" Entonces
Rango ("D40: E40"). Bloqueado = Falso
ElseIf Rango("A40") = "" Entonces
Rango ("D40: E40"). Bloqueado = Verdadero
Si terminar
End Sub


Mi pensamiento al respecto fue si no hay nada en él (A40). Entonces quiero bloqueado por VBA. Si A40 contiene algo, entonces quiero que esté desbloqueado. Espero que puedas ver el sentido de esto.


Saludos Kristoffer
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
No hay nada malo con tu código. Funciona bien para mí.
Este comentario fue minimizado por el moderador en el sitio
Hola. Yo tampoco puedo hacer que este código funcione. No hace absolutamente nada. ¿Como si el código ni siquiera estuviera allí? Soy muy nuevo en VBA y tengo una comprensión básica al respecto. ¿Se está ejecutando este código tal como está, o también tiene que tener cosas agregadas para que se ejecute? O convertido en una Macro (que realmente no entiendo por qué porque es una grabación de instrucciones, según mi comprensión de ellas)
Este comentario fue minimizado por el moderador en el sitio
CUÁL SERÁ EL CÓDIGO SI QUIERO BLOQUEAR LA CELDA E1, E2, E3 .............. PARA UN TEXTO ESPECÍFICO (DIGAMOS "P") EN LA CELDA B1, B2, B3... ..............RESPECTIVAMENTE.

GRACIAS POR ADELANTADO
Este comentario fue minimizado por el moderador en el sitio
Good Day
Intente debajo del script VBA.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Count = 1 Entonces
Si Destino.Dirección = Rango("A1").Dirección y Destino.Valor = "A" Entonces
Rango ("B1"). Bloqueado = Verdadero
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Entonces
Rango ("B2"). Bloqueado = Verdadero
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Entonces
Rango ("B3"). Bloqueado = Verdadero
Si terminar
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Buen día!
Мне тоже необходимо заблокировать значение, но только в одной ячейке в зависимости от значения в другой, я попробовала использовать код в комментарии выше, но он не работает(оставила только один параметр для блокировки), но он у меня не работает - при этом нет сообщения об ошибке, ячейка, которая должна быть заблокирована - просто не блокируется, остается активной. В чем может быть причина?

Вот код, который я использовала:

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Target.Count = 1 Entonces
If Target.Address = Range("C9").Address And Target.Value = "согласно плану" Entonces
Rango ("C10"). Bloqueado = Verdadero
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola fantasma,
Lo siento, no entiendo muy bien lo que quieres decir. Para mayor claridad, adjunte un archivo de muestra o una captura de pantalla con sus datos y los resultados deseados.
Este comentario fue minimizado por el moderador en el sitio
¡Hola! Necesito un consejo.
¿Hay alguna forma de no permitir que una celda se actualice a menos que haya cumplido una condición en otra celda?
Ejemplo: si la celda A no está actualizada, no me permitirá cambiar el valor de la celda B para completar.

Aprecio los comentarios.
¡Gracias!
Este comentario fue minimizado por el moderador en el sitio
Estimada Margie,
Intente debajo del código VBA.

Dim PreVal como cadena
Dim NextVal como cadena
Hoja de trabajo privada Sub_Activate ()
PreVal = Rango ("A1")
NextVal = Rango ("A1")
End Sub
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si (Target.Count = 1) Y (Target.Address = "$A$1") Entonces
NextVal = Rango ("A1")
Si terminar
End Sub
Sub hoja de trabajo privada_Cambio de selección (rango de destino ByVal)
Si Target.Count = 1 Entonces
Si Target.Address = "$A$1" Entonces
PreVal = Rango ("A1")
ElseIf (Objetivo.Dirección = "$B$1") Entonces
Si PreVal = NextVal Entonces
Application.EnableEvents = False
Rango ("A1"). Seleccionar
Application.EnableEvents = True
Si terminar
Si terminar
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
alguien puede corregir esto pls>>>

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
For i = 7 Para 100
Si Rango("Celdas(D, i)") = "Préstamo" Entonces
Rango("Celdas(V, i):Celdas(X, i)").Bloqueado = Verdadero
ElseIf Rango("Celdas(D, i)") = "Ahorros" Entonces
Rango("Celdas(Q, i):Celdas(U, i)").Bloqueado = Verdadero
Rango("Celdas(W, i):Celdas(X, i)").Bloqueado = Verdadero
ElseIf Range("Cells(D, i)") = "ShareCap" Entonces
Rango("Celdas(Q, i):Celdas(U, i)").Bloqueado = Verdadero
Rango ("Celdas (V, i)"). Bloqueado = Verdadero
Si terminar
Siguiente i
End Sub
Este comentario fue minimizado por el moderador en el sitio
¡Hola! ¿Alguien me puede ayudar? Tengo que bloquear/congelar una celda. Esa celda está vinculada a otra y tiene un valor que cambia cada minuto. Lo que debo hacer es mantener el valor durante un cierto minuto/hora. ¿Cómo puedo hacer eso sin copiarlo y pegarlo como valor?
Este comentario fue minimizado por el moderador en el sitio
Querida Mira,
Lo siento, no puedo ayudar con esto, puedes publicar tu pregunta en nuestro foro: https://www.extendoffice.com/forum.html para obtener más soporte de Excel de nuestro profesional.
Este comentario fue minimizado por el moderador en el sitio
Hola,
Soy realmente nuevo en esto.
He estado tratando de armar un sistema de facturación en Excel.
Creé 3 hojas.
1. Plantilla de factura (Factura): solo una factura genérica que se envía a mis agentes semanalmente.

2. Una hoja de datos (Hoja de datos) para ser exactos, donde la factura puede leer la dirección del nombre de la empresa, etc., por lo que si algo cambia, la factura se actualizará automáticamente.

3. Una pestaña de calendario (Calendario 2018) para ser exactos, a la que se hace referencia en la plantilla de factura, y pone la fecha y el número de factura correspondientes en las facturas reales.

Lo que quiero hacer.
La pestaña del calendario sería mi página principal, agregué una celda desplegable de estado para cada semana con las opciones "Activo" y "Cerrado". Me gustaría bloquear toda la pestaña "Factura" si la celda correspondiente está configurada como "Cerrada".

Espero que entiendan lo que estoy tratando de hacer.
Gracias de antemano.
Este comentario fue minimizado por el moderador en el sitio
Estimado Ando Veres.
El siguiente código de VBA puede ayudarlo. Coloque el código en la ventana de código de hoja del Calendario 2018, cambie A1 a su celda desplegable. Gracias.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xRg como rango
On Error Resume Next
Establecer xRg = Intersecar (Objetivo, Rango ("A1"))
Si xRg no es nada, salga de Sub
Si Target.Validation.Type >= 0 Entonces
Si Target.Value = "Cerrado" Entonces
Hojas("Hoja de datos").Proteger
ElseIf xRg.Value = "Activo" Entonces
Hojas ("Hoja de datos"). Desproteger
Si terminar
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Preparo una plantilla de gestión de stock de almacén en Excel. Para entregar un stock, tengo que emitir un pase de puerta. Quiero que cada pase de puerta, los datos correspondientes se actualicen en la página de toma de inventario diaria. la fila se bloqueará y la siguiente se llenará.
Este comentario fue minimizado por el moderador en el sitio
Buenos días,
Sería bueno si pudieras subir tu libro de trabajo aquí. Gracias por tu comentario.
Este comentario fue minimizado por el moderador en el sitio
¿Puedes guiarme sobre lo que está mal aquí, por favor? Gracias de antemano.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Rango("K:K") = "EXCEDENTE DE EXISTENCIAS" Entonces
Rango("S:S").Bloqueado = Verdadero
ElseIf Rango("K:K") = "MOVIMIENTO LENTO" Entonces
Rango("S:S").Bloqueado = Verdadero
ElseIf Rango("K:K") = "NORMAL" Entonces
Rango("S:S").Bloqueado = Falso
ElseIf Range("K:K") = "ESCASEZ" Entonces
Rango("S:S").Bloqueado = Falso
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
¿Sería tan amable de aconsejarme sobre cómo corregir esto? Gracias de antemano.

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Rango("A:A") = "MOVIMIENTO LENTO" Entonces
Rango("B:B").Bloqueado = Verdadero
ElseIf Range("A:A") = "EXCEDENTE DE INVENTARIO" Entonces
Rango("B:B").Bloqueado = Verdadero
ElseIf Rango("A:A") = "NORMAL" Entonces
Rango("B:B").Bloqueado = Falso
Si terminar
End Sub
Este comentario fue minimizado por el moderador en el sitio
Al no ser un experto en VB, diría que tiene demasiados "Elseif". Si los cambia todos a solo IF, excepto el último, con suerte funcionará.
Básicamente, si X hace esto, si Y hace esto, si Z hace esto, si ninguno de esos, haz esto.
Este comentario fue minimizado por el moderador en el sitio
¿Cómo sería el código si quisiera bloquear un bloque de celdas (filas 6, 7 y 8/letras D a U, así como celdas F5 y J5) y desbloquearlas cuando coloque una "X" en la celda E5? ¡Gracias por adelantado!
Este comentario fue minimizado por el moderador en el sitio
Hola MitchyII,
¿Quiere decir que el bloque de celdas especificado se bloqueó manualmente por adelantado y solo desea desbloquearlo escribiendo una "X" en la celda E5?
Si elimina "X" de la celda E5, ¿desea volver a bloquear los rangos?
Necesito mas detalles del problema.
Gracias por tu comentario.
Este comentario fue minimizado por el moderador en el sitio
Hola, Mitchyll (o cualquiera), construyendo a partir de Crystal. He bloqueado manualmente todas las celdas y, según la información de la columna G, me gustaría que permanezcan bloqueadas o desbloqueadas. Las celdas de ejemplo en la columna H SOLO deben desbloquearse si se coloca "c/p" en la celda anterior de la columna G
Este comentario fue minimizado por el moderador en el sitio
¿Es posible bloquear una celda cuando alcanza un cierto valor?
Este comentario fue minimizado por el moderador en el sitio
Hola, ¿podrías verificar la razón por la que no funciona?

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Si Rango("A3:A37").Valor <> "" Entonces
Rango ("B3: B37"). Bloqueado = Verdadero
ElseIf Rango("A3:A37") = "" Entonces
Rango ("B3: B37"). Bloqueado = Falso
Si terminar

Si Rango("B3:B37").Valor <> "" Entonces
Rango ("A3: A37"). Bloqueado = Verdadero
ElseIf Rango("B3:B37") = "" Entonces
Rango ("A3: A37"). Bloqueado = Falso
Si terminar

End Sub


¡¡¡Muchas gracias por adelantado!!!
Este comentario fue minimizado por el moderador en el sitio
Hi
Acabo de intentar usar el código de arriba
y dice error tipo 13 cuando trato de usarlo.
¿podrías ayudarme con esto?

gracias
Este comentario fue minimizado por el moderador en el sitio
Hola,
¿Qué versión de Excel estás usando?
Este comentario fue minimizado por el moderador en el sitio
hi

si necesito bloquear una celda en la hoja 2 (celda C4) en base a un reclamo de la hoja 1 (celda C1),
si "no" en la hoja 1 C4; la hoja 2 debe estar bloqueada y debe transferir el valor de la hoja 1 C4,
a la hoja 2 C4.

si "sí" en la hoja 1, debo poder escribir en la celda de la hoja 2

Gracias Benthe
Este comentario fue minimizado por el moderador en el sitio
Hola, por favor, alguien que me ayude con el código VBA.

si selecciono del menú desplegable en el rango de celdas (A1: A1000) "abc", entonces no bloqueo el rango (D1: D1000) a (F1: F1000)



si selecciono del menú desplegable en el rango de celdas (A1: A1000) "abc", entonces no bloqueo el rango (D1: D1000) a (F1: F1000)



si selecciono del menú desplegable en el rango de celdas (A1: A1000) "abc", luego bloqueo el rango (D1: D1000) a (F1: F1000)



es decir, celda respectiva A1 para D1 a F1



A2 para para D2 a F2
Este comentario fue minimizado por el moderador en el sitio
Copié todo lo de arriba en una hoja. Funcionó por un segundo y ahora aparece el error "No se puede establecer la propiedad Locked de la clase Range". Incluso abrí una hoja completamente nueva y copié tu ejemplo palabra por palabra. ¿Tienes idea de lo que está pasando?
Este comentario fue minimizado por el moderador en el sitio
Hola,

Necesito tu favor. cuando selecciono Sin opción de una celda, quiero que las columnas a continuación estén bloqueadas/atenuadas.

¿Es eso posible? Probé esta fórmula pero no funcionó

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)

Si Rango("D90") = "Sí" Entonces

Rango ("C94: F104"). Bloqueado = Falso

ElseIf Rango("D90") = "No" Entonces

Rango ("C94: F104"). Bloqueado = Verdadero

Si terminar

End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola Stefi,
El código funciona bien.
Si desea bloquear el rango de celdas para evitar la edición, debe proteger la hoja de trabajo manualmente después de seleccionar Sin opción en D90.
Y como D90 está en el rango C94:F104, después de proteger la hoja de trabajo, D90 tampoco se puede editar.
Este comentario fue minimizado por el moderador en el sitio
D90 no está en el rango. Está 4 filas por encima de C94
No hay comentarios publicados aquí todavía
Ver más
Deje sus comentarios
Publicar como invitado
×
Califica esta publicación:
0   Personajes
Ubicaciones sugeridas

Siganos

Copyright © 2009 - www.extendoffice.com. | Reservados todos los derechos. Energizado por ExtendOffice, | Mapa del Sitio
Microsoft y el logotipo de Office son marcas comerciales o marcas comerciales registradas de Microsoft Corporation en los Estados Unidos y / o en otros países.
Protegido por Sectigo SSL