Visual Basic - código VBA para pular ou ignorar a regra se a célula contiver determinado valor

1

Eu escrevi o seguinte código VBA para preencher automaticamente a coluna "P" com "pendente", "Não vencido", "-" com base no valor da coluna "O".

O usuário terá que inserir manualmente "complete" na coluna "P" se a tarefa estiver concluída. Isso não é preenchido automaticamente.

Eu preciso ter certeza de que a última regra (se a coluna O for "yes", então insira "pendente na coluna P) será ignorada se a coluna" P "já disser" Complete ".

Alguém pode me ajudar por favor? Razoavelmente urgente. Obrigado!

Sub info()
    Dim i As Long
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "No" Then
            ActiveSheet.Range("P" & i) = "Not due"
        End If
    Next i
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "-" Then
            ActiveSheet.Range("P" & i) = "-"
        End If
    Next i
    **For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "Yes" Then
            ActiveSheet.Range("P" & i) = "Pending"
        End If**
    Next i
End Sub
    
por Lexi 15.01.2018 / 12:01

2 respostas

2

Você pode fazer isso adicionando uma verificação IF adicional. Eu também otimizei o código indo de 3 loops para 1 loop, então o código é 3 vezes mais rápido, e coloquei as 3 verificações em um caso selecionado para que ele seja mais fácil.

Seu código seria algo como isto:

Sub info()
    Dim i As Long
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row

        Select case ActiveSheet.Cells(i, 15)
            Case is "No"
                ActiveSheet.Range("P" & i) = "Not due"

            Case is "-"
                ActiveSheet.Range("P" & i) = "-"

            Case is "Yes"
                If not ActiveSheet.Range("P" & i) = "Complete" then
                    ActiveSheet.Range("P" & i) = "Pending"
                End if

        End Select

    Next i
End Sub
    
por 15.01.2018 / 12:14
0

Você também pode experimentar este código VBA.

Private Sub CommandButton3_Click()

Dim rng As Range
Set rng = Range("P1:P3")

 For Each r In rng
   v = r.Value

     If v = "No" Then
       r.Offset(5, 1).Value = "Not Due"
     End If

     If v = "-" Then
       r.Offset(5, 1).Value = "- -"
     End If

     If v = "Yes" Then
       If r.Offset(5, 1).Value = "Complete" Then Exit Sub
       r.Offset(5, 1).Value = "Pending"

     End If

 Next r

End Sub

NB: Seu intervalo de entrada para Não , - e Sim é P1: P3.

O primeiro clique preencherá a célula O6: O8 com não vencido , - e pendente .

Assim que você escrever Completo na célula O8, este código irá pular a célula O8.

Nota, você pode alterar a posição de intervalo de entrada e deslocamento de célula.

Espero que isso ajude você.

Lembre-se de que publiquei esta solução depois de ter sido testada por mim. Se alguém discordar de tudo isso, ESCREVA A RAZÃO antes de BAIXAR VOTO.

    
por 15.01.2018 / 14:07