terça-feira, 31 de março de 2009

Ms-Excel com VBA - Dica de Programação

Introdução
Durante um treinamento de Excel com VBA um participante me perguntou se havia alguma maneira de fazer uma célula do Excel ficar piscando enquanto o arquivo do Excel estivesse aberto. A idéia é chamar atenção para uma determinada célula da planilha.
Apesar dos novos recursos de formatação condicional da versão 2007 do Excel, não conheço nenhuma forma de fazer uma célula ficar piscando com uma determinada cor enquanto a planilha estiver ativa e como o curso era de Excel com VBA, decidi escrever um código que permitisse realizar essa ação.
Como fazer
Inicie o Excel e em qualquer planilha e com qualquer célula selecionada, inicie o Visual Basic, através do menu Ferramentas -> Macro -> Editor do Visual Basic.
Incira um novo módulo padrão e digite o código abaixo:

Sub Piscar()
Selection.Interior.ColorIndex = 3
Application.OnTime Now + TimeValue("00:00:01"), "Tempo"
End Sub

Esse código executará duas ações: primeiro colocar a cor vermelha na célula que está ativa e a segunda linha aplica o método OnTime que permite executar o procedimento Tempo no intervalo de 1 em 1 segundo.

Em seguida, escreva o procedimento abaixo:

Sub Tempo()
Selection.Interior.ColorIndex = xlNone
Application.OnTime Now + TimeValue("00:00:01"), "Piscar"
End Sub

O procedimento Tempo executa duas ações: a primeira linha coloca na célula ativa a cor de preenchimento nenhuma (xlNone) e a segunda linha tem o método OnTime que executa o procedimento Piscar no intervalo de 1 em 1 segundo.

Clique no botão executar sub ou userform na janela do Visual Basic e depois retorne para qualquer planlilha e verifique se a célula ativa está piscando na cor vermelha.

2 comentários:

  1. Amigo, deu certo sim.
    Agora gostaria de saber como fazer para somente a célula indicada fique piscando, pois, com a macro desse jeito. em cada célula que eu clico, a mesma fica piscando.

    ResponderExcluir
  2. Amigo, Sua dica me foi muito útil.
    Muito obrigado.
    Francisco Rubira

    ResponderExcluir