Função Rollover (Mouse Over) em planilha

Quem desenvolve em VBA já conhece o evento MouseMove.

Esse evento responde a posição do movimento do mouse sobre um determinado objeto.

É de muita utilidade quando precisamos captura o posicionamento do cursor em determinada situação.

Agora, quem não já precisou desse evento em uma célula dentro de uma planilha ? Pois é, não existe !

Mas há uma solução alternativa para isso.

Função HIPERLINK

A função HIPERLINK tem como objetivo criar um atalho (link) para abrir um documento no disco local ou em rede, ou ainda um endereço web.

Há dois argumentos a serem passados para essa função :

Local_vínculo e nome_amigável

Em Local_vínculo informamos os endereço que será aberto ao clicar sobre o link.

Em nome_amigável informamos o texto que será exibido.

Ex : =HIPERLINK(“www.google.com”;”Clique Aqui para abrir o Google”)

Funções UDF´s (User Defined Functions)

As funções UDF são aquelas em que voce as cria em código VBA personalizado para executar determinadas condições e retornar um valor para a planilha.

Tomemos como exemplo essa função: Retorna o nome da planilha atual na qual a função é chamada.

Function NomePlanilha() As String

NomePlanilha = Application.Caller.Worksheet.Name

End Function

Para chamarmos essa função na planilha, digitamos o nome da função em qualquer célula

.

O resultado seria este:

Limitação da Função UDF

Agora imagine a seguinte situação :

Queremos gravar o nome da planilha na célula ao lado (C2) e recuperar o valor dessa célula. A função ficaria assim :

Function NomePlanilha() As String

Application.Caller.Offset(0, 1) = Application.Caller.Worksheet.Name

NomePlanilha = Application.Caller.Offset(0, 1).Value

End Function

Observe que um erro será retornado, e o código não será executado.

Isso ocorre por que uma função, quando chamada de uma planilha não pode fazer referencia a outras células.

Quando isso acontece, o Excel interrompe a execução da função e retorna o erro #VALOR!.

Vamos à Pratica

Com os esses dois conceitos podemos produzir o efeito do MouseMove sobre a célula.

Ao usarmos uma função UDF como argumento da função HIPERLINK, essa ultima irá tentar “resolver o endereço” definido no argumento Local_vínculo.

Nesse momento em que o Excel faz essa verificação, isso faz que o código da função seja executado sem que seja do recalculo da função.

Dessa forma, as funcionalidades que fazer referencia a outras células funcionam normalmente.

Exemplo : Grafico de Evolução Regional

Para ilustramos essa situação:

  1. Crie uma pasta de trabalho em branco
  2. Na plan1, no intervalo A1:D5, inclua os seguintes dados
Região

2010

2011

2012

Norte

78

58

95

Sul

69

39

46

Leste

36

63

49

Nordeste

56

97

76

  1. Na célula E2, digite a seguinte formula : =ÍNDICE($A$1:$D$5;LIN();CORRESP($E$1;$A$1:$D$1;0))
  2. Arraste a alça de preenchimento da célula E2 ate a célula E5
  3. Seleciona as células do intervalo A2:A5 e do intervalo E2:E5
  4. No Grupo Gráficos da Guia Inserir, clique no botão Colunas e no menu de tipo de gráficos clique em Colunas Agrupadas

5. Posicione o gráfico a partir da célula A7 para melhor visualização e formate conforme necessidade (o meu ficou como a imagem abaixo).

  1. Vamos até ao Editor de VBA para modificarmos nossa função.
  2. Escreva a seguinte função :

    Function MouseMove(Ano As Integer)

    Range(“E1”) = Ano

    End Function

  3. Voltamos a planilha e digite nas células abaixo as respetivas formulas :
Celula Formula Corresponde ao ano
L12 =SEERRO(HIPERLINK(MouseMove(2010);””);2010) 2010
L14 =SEERRO(HIPERLINK(MouseMove(2011);””);2011) 2011
L16 =SEERRO(HIPERLINK(MouseMove(2012);””);2012) 2012

Pronto, nosso exemplo esta finalizado.

Agora é so passar o mouse sobre as células e verás a magica !

O gráfico será atualizado conforme a célula recebe o foco.

Isso acontece por que ao receber o foco na célula, o Excel tentará verificar o endereço da função HIPERLINK que no argumento do local_vinculo esta a chamada da função “MouseMove“.

Essa por sua vez, recebe um argumento que é o ano (Ano As Integer) e simplesmente salva na célula E1.

Com isso, o trabalho da macro VBA esta concluído, agora é somente formula nativa Excel.

Na coluna E, a formula INDICE retorna o valor da região (LIN()) para o ano correspondente que esta na célula E1 (usando Corresp)

E varias outras situações poderia ser feitas, como por exemplo formatação condicional, etc.

Tambem, é possível manipular outras funcionalidades na função VBA como por exemplo exibir um MsgBox ou qualquer outro recurso, já que a função irá se comportar como se fosse um uma função normal.

Ate a próxima !

Veja também

2017-06-25T18:45:11-03:00