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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top