Ir ao conteúdo
  • Cadastre-se
Augusto César LMP

Excel VBA - Vários if para finalizar comando

Recommended Posts

Boa tarde, tudo bem?

Minha situação é a seguinte: tenho a planilha abaixo. Quero que quando alguém alterar uma das colunas 1, 3, 4 ou 5 (A, C, D, e E), a coluna 10 (J) preencha a data e horário da atualização (= NOW). Contudo, também quero que caso essas quatro colunas estejam em branco (As quatro em branco, não apenas uma delas), a coluna 10 também fique em branco. Não estou conseguindo colocar essas condicionais. Segue a planilha (apenas um exemplo, não é a que vou usar de fato) e o código:

image.png.e8fe1fbca0bc9c0b693259187f494a77.png

 

Código:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column = 1 Then Cells(Target.Row, 10) = Now
    If Target.Column = 3 Then Cells(Target.Row, 10) = Now
    If Target.Column = 4 Then Cells(Target.Row, 10) = Now
    If Target.Column = 5 Then Cells(Target.Row, 10) = Now
    
If Target.Value = "" Then
    Cells(Target.Row, 10) = ""
    End If
    End Sub


 

adicionado 25 minutos depois

Não sei se fui claro, mas:
Se todas as colunas especificadas estiverem em branco, quero que a coluna 10 fique em branco.

Se alguma das colunas especificadas forem alteradas, quero que a coluna 10 faça = NOW

Se caso alguém altere uma das colunas especificadas, erroneamente, perceba, e apague, voltando à primeira condicional, quero que a coluna 10 volte a ficar em branco

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Augusto César LMP disse:

Quero que quando ...

Contudo, também quero que caso ...

... quero que a coluna 10 fique ...

... quero que a coluna 10 faça = NOW

... quero que a coluna 10 volte ...

 

Pois não, Chefe :P

 

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("A:A, C:E")) Is Nothing Then Exit Sub
 Cells(Target.Row, 10) = IIf(Application.CountA(Cells(Target.Row, 1), Cells(Target.Row, 3).Resize(, 3)) < 4, "", Now)
End Sub

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro @Augusto César LMP , não sei se entendi direito, mas não custa tentar:

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rg As Range, brancas As Byte
  If Not Intersect(Target, Me.Range("A:A,C:E")) Is Nothing Then
    Set rg = Intersect(Target.EntireRow, Me.Range("A:A,C:E"))
    With Application.WorksheetFunction
      brancas = .CountBlank(rg.Areas(1)) + .CountBlank(rg.Areas(2))
    End With
    Application.EnableEvents = False
      With Me.Cells(rg.Row, 10)
        If brancas = 4 Then .ClearContents Else .Value = Now
      End With
    Application.EnableEvents = True
  End If
  Set rg = Nothing
End Sub

_____

PS: :oops:, amigo Olsvaldo, não me dei conta que você já tinha respondido... e tá bem melhor e mais enxuto seu código! 👏👏👏

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Mestre Edson.

Quanto mais sugestões, mais enriquece o tópico. E em consultas futuras cada código certamente terá a sua utilidade.

 

Tal como você, eu também fiquei em dúvida com as necessidades do Chefe, pois aparentemente há conflito entre as duas colocações abaixo.

1. "Contudo, também quero que caso essas quatro colunas estejam em branco (As quatro em branco, não apenas uma delas), a coluna 10 também fique em branco."

2. "Se caso alguém altere uma das colunas especificadas, erroneamente, perceba, e apague, voltando à primeira condicional, quero que a coluna 10 volte a ficar em branco"

 

Mas, em ambos os códigos basta alterar o sinal de comparação.

...Resize(, 3)) < 4

If brancas = 4 ...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Edson Luiz Branco O seu código funcionou para esta planilha, mas no trabalho me deparei com a seguinte situação:
"se modificar as colunas 15, 20, 21 ou 23, tem que registrar a hora da 22. Se todas estiverem vazias, a 22 fica vazia"

Tentei alterar o me.range, mas não deu certo.

adicionado 17 minutos depois
17 minutos atrás, Augusto César LMP disse:

@Edson Luiz Branco O seu código funcionou para esta planilha, mas no trabalho me deparei com a seguinte situação:
"se modificar as colunas 15, 20, 21 ou 23, tem que registrar a hora da 22. Se todas estiverem vazias, a 22 fica vazia"

Tentei alterar o me.range, mas não deu certo.

Consegui! Valeeeeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×