Notifications
Clear all

Pisca-Pisca

8 Posts
3 Usuários
0 Reactions
1,608 Visualizações
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Bom dia !

Estou tentando fazer um pisca-pisca, sendo se a celula estiver com Meta Atingida ! pisca verde 10 x e para com a cor de fundo verde.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim x As Long
    
    If Range("X4").Value = "Meta Atingida !" Then
        
        For x = 1 To 10 'total de piscadas
         
                     
                'Formata Cor do Interior da celula
                If Range("X4").Interior.ColorIndex = xlNone Then
                    Range("X4").Interior.Color = RGB(0, 128, 0)
                Else
                    Range("X4").Interior.ColorIndex = xlNone
                End If
        Next x
    
                Range("X4").Interior.ColorIndex = xlNone
    End If

End Sub

 
Postado : 29/11/2016 7:15 am
(@biogas)
Posts: 21
Eminent Member
 

Me parece que assim ela só vai piscar cinco vezes, já que você necessita de um loop para colocá-la em verde e outra vez para colocá-la em branco.
Talvez você já queira adiantar e colocar o for de 1 to 20. Também, após o for, troque a linha " Range("X4").Interior.ColorIndex = xlNone" por "Range("X4").Interior.Color = RGB(0, 128, 0)", assim você tem certeza de que vai terminar e ficar verde.
Agora, para alterar o tempo entre a execução das tarefas (se não não vai ser possível visualizar a troca de cores, o piscar), utilize a application Wait.
Segue minha sugestão:

Sub change()
    
    Dim x, newHour, newMinute, newSecond As Long
    Dim waitTime As Date
    
    If Range("A4").Value = "Meta Atingida !" Then
        
        For x = 1 To 20 'total de piscadas
         
                newHour = Hour(Now())
                newMinute = Minute(Now())
                newSecond = Second(Now()) + 1
                waitTime = TimeSerial(newHour, newMinute, newSecond)
                Application.Wait waitTime 'gerencia o tempo até continuar a ação
                'Formata Cor do Interior da celula
                If Range("A4").Interior.ColorIndex = xlNone Then
                    Range("A4").Interior.Color = RGB(0, 128, 0)
                Else
                    Range("A4").Interior.ColorIndex = xlNone
                End If
        Next x
    
                Range("A4").Interior.Color = RGB(0, 128, 0)
    End If
MsgBox ("feito")
End Sub

Aquele "+1" em newSecond é o tempo de espera para a mudança de cor. Basta aterá-lo conforme desejar.
Abaixo deixo a fonte da solução, que também contém outras opções.
http://www.tomasvasquez.com.br/blog/mic ... era-no-vba

 
Postado : 29/11/2016 7:50 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Segue outra opção, sem usar Application.Wait

Click em se a resposta foi util!

 
Postado : 29/11/2016 8:48 am
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Basole, quase lá !

Só funciona se pressionar ENTER
Se o valor da celula P4 for maior que da celula O4, X4 vai aparecer "Meta atingida" e começa a piscar

Obrigado desde já !

 
Postado : 29/11/2016 9:51 am
(@biogas)
Posts: 21
Eminent Member
 

Bem,para ela terminar em verde é só trocar umas das ultimas linha, já que a mesma está mudando de volta para a cor branca.

Já para a questão de P4 ser maior que O4, basta adicionar outro if.

 If Range("P4").Value > Range("O4").Value then
Range("X4").Value = "Meta atingida"
End If
 
Postado : 29/11/2016 10:42 am
Basole
(@basole)
Posts: 487
Reputable Member
 

vonzuben, veja as alteraçoes.

Como a celula X4 é alterada atraves de formula, utilizei o evento calculate.

A X4 irá piscar ao alterar o valor da Celula "P4" para um valor maior que o valor da celula "O4 "
caso contrario, limpa o preenchimento.

Click em se a resposta foi util!

 
Postado : 29/11/2016 10:57 am
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Não precisa colocar se não for número, pois vai ser e ainda será bloqueada a celula

Tentei adaptar nessa planilha e sem sucesso

OBS: A formula da X2 tem que ficar

Obrigado !

 
Postado : 29/11/2016 6:12 pm
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Laennder resolveu !
Era só colocar essa linha
Application.Wait Now() + TimeValue("00:00:01")

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim x As Long
   
    If Range("X2").Value = "Meta Atingida !" Then
       
        For x = 1 To 10 'total de piscadas
         
                     
                'Formata Cor do Interior da celula
                If Range("X2").Interior.ColorIndex = xlNone Then
                    Range("X2").Interior.Color = RGB(0, 128, 0)
                Else
                    Range("X2").Interior.ColorIndex = xlNone
                End If
        Next x
   
                Range("X2").Interior.ColorIndex = xlNone
    End If
    Application.Wait Now() + TimeValue("00:00:01")

End Sub

Obrigado a todos !

 
Postado : 29/11/2016 7:28 pm