Desbloquear célula em uma condição da célula adjacente
-
09-09-2019 - |
Pergunta
Eu tenho duas colunas, mas a Codição que eu gostaria é ser avaliada de uma célula para outra.
A primeira coluna possui células que têm uma validação suspensa com nomes, e a segunda será ativada apenas se um determinado nome da célula adjacente for selecionado.
Até agora, eu só encontrei esse código, mas não parece funcionar:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value = "Car" Then
Range("B1").Locked = False
Else
Range("B1").Locked = True
End If
End Sub
Eu precisaria desse código ir de (por exemplo) A1: A10 e B1: B10.
Espero estar fazendo sentido. Se houver uma maneira de fazê -lo sem VBA, isso seria ótimo.
Obrigado pela ajuda.
Solução
O parâmetro de destino informa o intervalo que está sendo alterado.
Você precisa fazer algo como o seguinte:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Intersect(Range("A1:A10"), Target)
If rng Is Nothing Then
' Not updating the range we care about
Exit Sub
Else
rng.Offset(0, 1).Locked = ... whatever ...
End If
End Sub
Observe que seu intervalo de destino pode ser mais de uma célula (por exemplo, ao usar copiar/colar); portanto, você precisa manipular e testar este caso.
Chamar intersect retorna a interseção do intervalo de destino e o intervalo que você está interessado em testar (A1: A10 nesta amostra).
Você pode acessar as células adjacentes correspondentes usando .offset (0,1)
Outras dicas
Esse snippet de código funciona perfeitamente para mim.
Você colocou esse código no apropriado WorkSheet
objeto? Não funcionará se você apenas colocá -lo em um módulo VBA. Quando você estiver no Editor Visual Basic, procure um diretório no lado esquerdo da tela "Microsoft Excel Objects". Nesse diretório deve ser um WorkSheet
Objeto para cada folha do seu arquivo. Clique duas vezes em um deles para editar o código para isso WorkSheet
. É aqui que seu snippet de código deve ir.
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value = "Car" Then
Range("B1").Locked = False
Me.Unprotect ("password")
Else
Range("B1").Locked = True
Me.Protect ("password")
End If
End Sub
Use -me.protect para que o método. Locked faça algo. Você provavelmente deve desbloquear todas as outras células.