
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:
- Crie uma pasta de trabalho em branco
- 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 |
- Na célula E2, digite a seguinte formula : =ÍNDICE($A$1:$D$5;LIN();CORRESP($E$1;$A$1:$D$1;0))
- Arraste a alça de preenchimento da célula E2 ate a célula E5
- Seleciona as células do intervalo A2:A5 e do intervalo E2:E5
- 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).
- Vamos até ao Editor de VBA para modificarmos nossa função.
- Escreva a seguinte função :
Function MouseMove(Ano As Integer)
Range(“E1”) = Ano
End Function
- 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
Navita e Microsoft firmam parceria em mobilidade corporativa
A Navita, empresa de mobilidade corporativa e gestão de telecom, e a Microsoft acabam de anunciar uma parceria estratégica para o mercado de mobilidade e segurança corporativa. [...]
Microsoft encerra suporte ao Office 2007 no próximo dia 10 de outubro
As empresas que utilizam o Office 2007 têm pouco mais de três meses para substituir os aplicativos para uma versão mais recente do pacote, como o Office 2016. É que em 10 de [...]
Apps sem inteligência vão sumir, diz cientista da Microsoft
São Paulo – Rico Malvar é um dos brasileiros de maior destaque dentro da Microsoft. Malvar é cientista chefe na Microsoft Research e é gestor do MSR NExT Enable, grupo de pesquisa para [...]