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

Como bloquear ou desbloquear células com base em valores em outra célula no Excel?

Em alguns casos, pode ser necessário bloquear ou desbloquear células com base nos valores de outra célula. Por exemplo, você precisa que o intervalo B1: B4 seja desbloqueado se a célula A1 contiver o valor “Aceitando”; e a ser bloqueado se a célula A1 contiver o valor “Recusando”. Como você pode fazer para alcançá-lo? Este artigo pode te ajudar.

Bloqueie ou desbloqueie células com base em valores em outra célula com código VBA


Bloqueie ou desbloqueie células com base em valores em outra célula com código VBA

O seguinte código VBA pode ajudá-lo a bloquear ou desbloquear células com base no valor de outra célula no Excel.

1. Clique com o botão direito na guia da planilha (a planilha com as células que você precisa bloquear ou desbloquear com base nos valores em outra célula) e clique Ver código no menu do botão direito.

2. Em seguida, copie e cole o seguinte código VBA na janela Código.

Código VBA: bloqueie ou desbloqueie células com base em valores em outra célula

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. aperte o outro + Q simultaneamente para fechar o Microsoft Visual Basic para Aplicações janela.

A partir de agora, quando você inserir o valor “Aceitando” na célula A1, o intervalo B1: B4 será desbloqueado.

Ao inserir o valor “Recusando” na célula A1, o intervalo especificado B1: B4 é bloqueado automaticamente.


Artigos relacionados:


As melhores ferramentas de produtividade para escritório

O Kutools for Excel resolve a maioria dos seus problemas e aumenta sua produtividade em 80%

  • armadilha para peixes: Insira rapidamente fórmulas complexas, gráficos e qualquer coisa que você tenha usado antes; Criptografar células com senha; Criar lista de discussão e enviar emails ...
  • Barra Super Fórmula (edite facilmente várias linhas de texto e fórmula); Layout de leitura (ler e editar facilmente um grande número de células); Colar na faixa filtrada...
  • Mesclar células / linhas / colunas sem perder dados; Dividir o conteúdo das células; Combinar linhas / colunas duplicadas... Evite células duplicadas; Comparar intervalos...
  • Selecione Duplicado ou Único Linhas; Selecione linhas em branco (todas as células estão vazias); Super Find e Fuzzy Find em muitos livros; Seleção aleatória ...
  • Cópia exata Várias células sem alterar a referência da fórmula; Criação automática de referências para várias folhas; Inserir marcadores, Caixas de seleção e mais ...
  • Extrair Texto, Adicionar texto, remover por posição, Remover Espaço; Criar e imprimir subtotais de paginação; Converter entre conteúdo de células e comentários...
  • Super Filtro (salvar e aplicar esquemas de filtro a outras planilhas); Classificação Avançada por mês / semana / dia, frequência e mais; Filtro Especial por negrito, itálico ...
  • Combine pastas de trabalho e planilhas; Mesclar tabelas com base em colunas-chave; Divida os dados em várias folhas; Conversão em lote de xls, xlsx e PDF...
  • Mais de 300 recursos poderosos. Suporta Office / Excel 2007-2019 e 365. Suporta todos os idiomas. Fácil implantação em sua empresa ou organização. Teste gratuito de 30 dias com recursos completos. Garantia de devolução do dinheiro em 60 dias.
guia kte 201905

Guia do Office traz interface com guias para o Office e torna seu trabalho muito mais fácil

  • Habilite a edição e leitura com guias em Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Abra e crie vários documentos em novas guias da mesma janela, em vez de em novas janelas.
  • Aumenta sua produtividade em 50% e reduz centenas de cliques do mouse para você todos os dias!
parte inferior da aba do escritório
Comentários (50)
Ainda não há classificações. Seja o primeiro a avaliar!
Este comentário foi feito pelo moderador no site
Como pode bloquear/desbloquear uma célula variável, por exemplo, quando a célula é [=INDEX(A16:L35,MATCH(W5,A16:A35,0),MATCH("PAY",A16:L16,0))]
Este comentário foi feito pelo moderador no site
Eu quero um comando VBA simples que não consigo descobrir por favor me ajude
Se a célula A1 for Balnk, a célula A2 será bloqueada e se a célula A1 contiver qualquer valor, a célula A2 será desbloqueada
Da mesma forma, se a célula A2 estiver em branco, a célula A3 será bloqueada e se a célula A2 contiver qualquer valor, a célula A3 será desbloqueada
e assim por diante quantas células forem necessárias em qualquer parte da planilha.
Este comentário foi feito pelo moderador no site
Oi, estou tentando fazer isso, mas recebo um erro de que o VBA não consegue definir a propriedade Locked da classe Range se a planilha tiver sido protegida. A desproteção da planilha anulará o bloqueio da célula. Como contornar isso? Obrigado por qualquer ajuda.
Este comentário foi feito pelo moderador no site
Você resolveu? Eu tenho o mesmo problema
Este comentário foi feito pelo moderador no site
Caro Memorando,
Por favor, tente o código VBA abaixo.

Sub-Planilha Particular_Activate ()
Se não for ActiveSheet.ProtectContents Então
Range("A1").Bloqueado = False
Range("B1:B4").Bloqueado = False
Se acabar
End Sub
Sub Worksheet_SelectionChange particular (destino ByVal como intervalo)
Dim xRg como intervalo, xRgA como intervalo
On Error Resume Next
Application.EnableEvents = False
Definir xRg = Range("B1:B4")
Definir xRgA = Range("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Ou xRgA = "Aceitando" Então
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
E Intersect(Target, xRg) = Target _
E xRgA.Value = "Recusando" Então
xRgA.Selecionar
Se acabar
Application.EnableEvents = True
End Sub
Este comentário foi feito pelo moderador no site
Você desejará usar a linha de interface na pasta de trabalho para que, ao abrir o arquivo, ela proteja as planilhas, mas permita que as macros façam alterações de qualquer maneira;

Private Sub Workbook_Open() 'Isso vai para "ThisWorkbook"

Worksheets("Order Tool").Proteger Senha:="Pwd", UserInterFaceOnly:=True

End Sub
Este comentário foi feito pelo moderador no site
Querida formiga,
O código VBA abaixo pode ajudá-lo a resolver esse problema. Obrigado pelo seu comentário.

Sub-Planilha Particular_Activate ()
Se não for ActiveSheet.ProtectContents Então
Range("A1").Bloqueado = False
Range("B1:B4").Bloqueado = False
Se acabar
End Sub
Sub Worksheet_SelectionChange particular (destino ByVal como intervalo)
Dim xRg como intervalo, xRgA como intervalo
On Error Resume Next
Application.EnableEvents = False
Definir xRg = Range("B1:B4")
Definir xRgA = Range("A1")
If Intersect(Target, xRg).Address <> Target.Address _
Ou xRgA = "Aceitando" Então
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
E Intersect(Target, xRg) = Target _
E xRgA.Value = "Recusando" Então
xRgA.Selecionar
Se acabar
Application.EnableEvents = True
End Sub
Este comentário foi feito pelo moderador no site
Oi,

É possível fazer com que este VBA bloqueie um conjunto de células/desbloqueie outro com base nisso? Por exemplo, o intervalo B1:B4 está desbloqueado e C1:C4 está bloqueado para "aceitar" e, em seguida, B1:B4 está bloqueado e C1:C4 está desbloqueado para "recusar"?


Obrigado,
cristão
Este comentário foi feito pelo moderador no site
Querido cristão,
Sua planilha está protegida?
Este comentário foi feito pelo moderador no site
por favor alguém pode me ajudar com o seguinte.
Quero inserir fotos de alunos em uma folha, aparece em outra folha com base em seus nomes
Para criar um plano de navegação para auxiliar os usuários
Para atribuir uma(s) folha(s) específica(s) a um usuário
Para criar uma interface para a pasta de trabalho
Para criar uma página de login
Este comentário foi feito pelo moderador no site
Caro Léo,
Qualquer dúvida sobre o Excel, não hesite em postar em nosso fórum: https://www.extendoffice.com/forum.html.
Você obterá mais suporte sobre o Excel do nosso profissional de Excel.
Este comentário foi feito pelo moderador no site
Olá,

Eu tentei seu código e editei um pouco, mas não consigo descobrir o que estou fazendo de errado aqui?

Private Sub Worksheet_Change (ByVal Target As Range)
If Range("A40") <> "" Então
Range("D40:E40").Bloqueado = False
ElseIf Range("A40") = "" Then
Range("D40:E40").Bloqueado = Verdadeiro
Se acabar
End Sub


O meu pensamento sobre isso foi se não tem nada (A40). Então eu quero bloqueado pelo VBA. Se A40 contiver algo, então eu quero que ele seja desbloqueado. Espero que você possa ver o sentido disso.


Atenciosamente Kristoffer
Este comentário foi feito pelo moderador no site
Bom dia,
Não há nada de errado com seu código. Funciona bem para mim.
Este comentário foi feito pelo moderador no site
Oi. Eu também não consigo fazer esse código funcionar. Não faz absolutamente nada. Como se o código nem estivesse lá?? Eu sou muito novo em VBA e tenho um entendimento básico sobre isso. Este código está sendo executado como está ou precisa ter coisas adicionadas a ele também para que seja executado? Ou se transformou em uma Macro (que eu realmente não entendo porque porque é uma gravação de instruções, no meu entendimento delas)
Este comentário foi feito pelo moderador no site
QUAL SERÁ O CÓDIGO SE EU QUISER BLOQUEAR CÉLULAS E1, E2, E3 .............. PARA TEXTOS ESPECÍFICOS (DIGO "P") NA CÉLULA B1, B2, B3... ..............RESPECTIVAMENTE.

Agradecemos antecipadamente
Este comentário foi feito pelo moderador no site
Good Day
Por favor, tente abaixo do script VBA.

Private Sub Worksheet_Change (ByVal Target As Range)
Se Target.Count = 1 Então
If Target.Address = Range("A1").Address And Target.Value = "A" Then
Range("B1").Bloqueado = Verdadeiro
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Then
Range("B2").Bloqueado = Verdadeiro
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Then
Range("B3").Bloqueado = Verdadeiro
Se acabar
Se acabar
End Sub
Este comentário foi feito pelo moderador no site
Oi! preciso de algum conselho.
Existe uma maneira de não permitir que uma célula seja atualizada, a menos que ela satisfaça uma condição em outra célula?
Amostra: se a célula A não estiver atualizada não me permitirá alterar o valor da célula B para completar.

Aprecie o feedback.
Obrigado!
Este comentário foi feito pelo moderador no site
Prezada Margie,
Por favor, tente abaixo do código VBA.

Dim PreVal As String
Dim NextVal As String
Sub-Planilha Particular_Activate ()
PreVal = Range("A1")
NextVal = Range("A1")
End Sub
Private Sub Worksheet_Change (ByVal Target As Range)
Se (Target.Count = 1) E (Target.Address = "$A$1") Então
NextVal = Range("A1")
Se acabar
End Sub
Sub Worksheet_SelectionChange particular (destino ByVal como intervalo)
Se Target.Count = 1 Então
Se Target.Address = "$A$1" Então
PreVal = Range("A1")
ElseIf (Target.Address = "$B$1") Then
Se PreVal = NextVal Então
Application.EnableEvents = False
Faixa("A1").Selecione
Application.EnableEvents = True
Se acabar
Se acabar
Se acabar
End Sub
Este comentário foi feito pelo moderador no site
alguém pode corrigir isso pls >>>

Private Sub Worksheet_Change (ByVal Target As Range)
Para i = 7 Para 100
If Range("Cells(D, i)") = "Empréstimo" Then
Range("Cells(V, i):Cells(X, i)").Locked = True
ElseIf Range("Cells(D, i)") = "Economia" Then
Range("Cells(Q,i):Cells(U,i)").Locked = True
Range("Cells(W, i):Cells(X, i)").Locked = True
ElseIf Range("Cells(D, i)") = "ShareCap" Then
Range("Cells(Q,i):Cells(U,i)").Locked = True
Range("Cells(V, i)").Locked = True
Se acabar
Proximo eu
End Sub
Este comentário foi feito pelo moderador no site
Oi! Alguém pode me ajudar? Eu tenho que bloquear/congelar uma célula. Essa célula está vinculada a outra e tem um valor que muda a cada minuto. O que eu faço é manter o valor por um determinado minuto/hora. Como posso fazer isso sem copiá-lo e colá-lo como um valor?
Este comentário foi feito pelo moderador no site
Cara Mira,
Desculpe não poder ajudar com isso, você pode postar sua pergunta em nosso fórum: https://www.extendoffice.com/forum.html para obter mais suportes do Excel de nosso profissional.
Este comentário foi feito pelo moderador no site
Oi,
Eu sou realmente novo nisso.
Eu tenho tentado montar um sistema de faturamento em excel.
Criei 3 folhas.
1. Modelo de fatura (Fatura)- Apenas uma fatura genérica que é enviada aos meus agentes semanalmente.

2. Uma folha de dados (Folha de dados) para ser exato - onde a fatura pode ler o endereço do nome da empresa etc., portanto, se algo mudar, a fatura será atualizada automaticamente.

3. Uma guia de calendário (Calendário 2018) para ser exato - que é referenciada no modelo de fatura e coloca a data e o número da fatura correspondentes nas faturas reais.

O que eu quero fazer.
A guia do calendário seria minha página principal, adicionei uma célula suspensa de status para cada semana com as opções "Ativo" e "Fechado". Eu gostaria de bloquear toda a guia "Fatura" se a célula correspondente estiver definida como "Fechada".

Espero que vocês entendam o que estou tentando fazer.
Obrigado antecipadamente.
Este comentário foi feito pelo moderador no site
Caro Ando Veres.
O código VBA abaixo pode ajudá-lo. Por favor, coloque o código na janela de código da planilha do Calendário 2018, altere A1 na sua célula suspensa. Obrigada.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRg como intervalo
On Error Resume Next
Set xRg = Intersect(Target, Range("A1"))
Se xRg não for nada, saia do sub
Se Target.Validation.Type >= 0 Then
Se Target.Value = "Fechado" Então
Sheets("Folha de dados").Proteger
ElseIf xRg.Value = "Ativo" Then
Sheets("Folha de dados").Desproteger
Se acabar
Se acabar
End Sub
Este comentário foi feito pelo moderador no site
Preparo uma gestão de stock de armazém em excel. a linha será bloqueada e a próxima será preenchida.
Este comentário foi feito pelo moderador no site
Bom dia,
Seria bom se você pudesse enviar sua pasta de trabalho aqui. Obrigado pelo seu comentário.
Este comentário foi feito pelo moderador no site
Você pode me orientar sobre o que está errado aqui, por favor? Agradeço antecipadamente.

Private Sub Worksheet_Change (ByVal Target As Range)
If Range("K:K") = "OVER STOCK" Então
Range("S:S").Bloqueado = Verdadeiro
ElseIf Range("K:K") = "SLOW MOVING" Then
Range("S:S").Bloqueado = Verdadeiro
ElseIf Range("K:K") = "NORMAL" Then
Range("S:S").Bloqueado = False
ElseIf Range("K:K") = "FALTA" Then
Range("S:S").Bloqueado = False
Se acabar
End Sub
Este comentário foi feito pelo moderador no site
Você poderia gentilmente me aconselhar sobre como corrigir isso? Agradeço antecipadamente.

Private Sub Worksheet_Change (ByVal Target As Range)
If Range("A:A") = "SLOW MOVING" Então
Range("B:B").Bloqueado = Verdadeiro
ElseIf Range("A:A") = "OVER STOCK" Then
Range("B:B").Bloqueado = Verdadeiro
ElseIf Range("A:A") = "NORMAL" Then
Range("B:B").Bloqueado = False
Se acabar
End Sub
Este comentário foi feito pelo moderador no site
Não sendo um especialista em VB, eu diria que você tem muitos "Elseif" - se você alterar todos para apenas IF, exceto o último, espero que funcione.
Basicamente, se X fizer isso, se Y fizer isso, se Z fizer isso, se nenhum desses - faça isso.
Este comentário foi feito pelo moderador no site
Como seria o código se eu quisesse bloquear um bloco de células (linhas 6, 7 e 8/letras D a U, bem como células F5 e J5) e desbloqueá-los quando eu colocar um "X" na célula E5? Desde já, obrigado!
Este comentário foi feito pelo moderador no site
Olá MitchyII,
Você quer dizer que o bloco de células especificado foi bloqueado manualmente com antecedência e deseja apenas desbloqueá-los digitando um "X" na célula E5?
Se remover "X" da célula E5, você deseja bloquear os intervalos novamente?
Preciso de mais detalhes do problema.
Obrigado pelo seu comentário.
Este comentário foi feito pelo moderador no site
Oi Mitchyll (ou qualquer um), construindo fora de Crystal. Eu bloqueei manualmente todas as células e, com base nas informações da coluna G, gostaria que elas permanecessem bloqueadas ou desbloqueadas. Células de exemplo na coluna H APENAS devem ser desbloqueadas se "c/p" for colocado na célula anterior na coluna G
Este comentário foi feito pelo moderador no site
É possível bloquear uma célula, quando atinge um determinado valor?
Este comentário foi feito pelo moderador no site
Olá, você poderia verificar o motivo pelo qual não funciona?

Private Sub Worksheet_Change (ByVal Target As Range)
If Range("A3:A37").Value <> "" Then
Range("B3:B37").Bloqueado = Verdadeiro
ElseIf Range("A3:A37") = "" Then
Range("B3:B37").Bloqueado = False
Se acabar

If Range("B3:B37").Value <> "" Then
Range("A3:A37").Bloqueado = Verdadeiro
ElseIf Range("B3:B37") = "" Then
Range("A3:A37").Bloqueado = False
Se acabar

End Sub


Muito obrigado antecipadamente!!!
Este comentário foi feito pelo moderador no site
Hi
Acabei de tentar usar o código acima
e diz erro tipo 13 quando tento usá-lo.
você poderia me ajudar com isso?

obrigado
Este comentário foi feito pelo moderador no site
Oi,
Qual versão do Excel você está usando?
Este comentário foi feito pelo moderador no site
hi

se eu precisar bloquear uma célula na planilha 2 (célula C4) com base em uma reclamação da planilha 1 (célula C1),
se "não" na folha 1 C4; a folha 2 deve ser trancada e deve transferir o valor da folha 1 C4,
para a folha 2 C4.

se "sim" na folha 1, devo ser capaz de digitar na célula da folha 2

Obrigado Benthe
Este comentário foi feito pelo moderador no site
Oi por favor alguém me ajude para o código VBA.

se eu selecionar no menu suspenso na célula Range (A1: A1000) "abc", não bloquear Range (D1: D1000) para (F1: F1000)



se eu selecionar no menu suspenso na célula Range (A1: A1000) "abc", não bloquear Range (D1: D1000) para (F1: F1000)



se eu selecionar no menu suspenso na célula Range(A1:A1000) "abc" então bloqueie Range(D1:D1000) para (F1:F1000)



ou seja, respectiva célula A1 para D1 a F1



A2 para para D2 a F2
Este comentário foi feito pelo moderador no site
Copiei tudo de cima para uma folha. Funcionou por um segundo e agora estou recebendo o erro 'Não é possível definir a propriedade Locked da classe Range'. Eu até abri uma folha totalmente nova e copiei seu exemplo literalmente. Alguma idéia do que está acontecendo?
Este comentário foi feito pelo moderador no site
Olá,

Eu preciso do seu favor. quando seleciono Nenhuma opção de uma célula, quero que as colunas abaixo sejam bloqueadas/esmaecidas.

Isso é possível? Eu tentei esta fórmula, mas não funcionou

Private Sub Worksheet_Change (ByVal Target As Range)

Se Range("D90") = "Sim" Então

Range("C94:F104").Bloqueado = False

ElseIf Range("D90") = "Não" Then

Range("C94:F104").Bloqueado = Verdadeiro

Se acabar

End Sub
Este comentário foi feito pelo moderador no site
Olá Steffi,
O código funciona bem.
Se você deseja bloquear o intervalo de células para impedir a edição, é necessário proteger a planilha manualmente após selecionar a opção Não em D90.
E como o D90 está na faixa C94:F104, após proteger a planilha, o D90 também não pode ser editado.
Este comentário foi feito pelo moderador no site
D90 não está no intervalo. Está 4 linhas acima de C94
Não há comentários postados aqui ainda
carregar mais
Deixe o seu comentário
Postando como convidado
×
Avalie esta postagem:
0   Personagens
Locais sugeridos