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

O que são Dynamic Arrays (Matrizes Dinâmicas) e como usar no Microsoft Excel 365

Se você chegou aqui, então provavelmente está querendo aprender mais sobre as Dynamic Arrays (ou Matrizes Dinânimcas) do Excel, não? Pois você está no melhor lugar possível para isso! Neste tutorial completo que preparamos, você [...]

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