Como posso acionar uma macro do Excel passando o mouse sobre uma célula?

2

Eu não consegui descobrir como executar uma macro do Excel movendo meu mouse sobre uma ou mais células na minha planilha.

    
por Reggie Royal 25.08.2014 / 01:34

4 respostas

2

Não há OnMouseOver no Excel VBA. Eu não acredito que isso possa ser feito.

    
por 25.08.2014 / 02:14
2

Embora não exista um evento OnMouseOver formal, você pode montar um hack do VBA para contorná-lo. Envolve o uso da função HYPERLINK. Há mais detalhes aqui , mas em resumo:

Se você criar um novo módulo VBA e adicionar uma função definida pelo usuário para fazer o que quiser:

Public Function OnMouseOver()
 Sheet1.Range("A2").Value = "You hovered over a cell"
End Function

Você pode acessá-lo através de uma ligação HYPERLINK:

=IFERROR(HYPERLINK(OnMouseOver(),"Click here"), "Click here")

Observe que ele está dentro de um IFERROR para evitar um valor de #VALUE! mensagem de erro porque sua função não deve atualizar uma célula (mas sai impune como é chamado dentro do HYPERLINK).

    
por 25.08.2014 / 03:24
1

A abordagem do HYPERLINK é fofa, muito perspicaz, mas ainda profundamente limitada. Por exemplo. você não pode sequer ter sStr="" no código UDF (note que os resultados podem variar de acordo com a versão do Excel). Muito melhor é um rótulo transparente (ou mesmo opaco), que possui a propriedade MouseMove. Coloque o seu código lá. (Eu localizei um link de vídeo que quase perfeitamente dá a você passo a passo em menos de 4 minutos, com comentários ainda melhores; se eu criasse um guia passo-a-passo aqui você gastaria meia hora :) . Mas se eu mostrar o link, este post será excluído [novamente] pelo Stack Exchange, portanto PM se quiser, e tentarei responder em alguns dias.)

    
por 14.03.2016 / 16:54
1

Você pode usar o ActiveX Label transparente ( .BackStyle = fmBackStyleTransparent , .Caption = "" , .Visible = True ) nas células e lidar com o MouseMove event:

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Debug.Print Button, Shift, X, Y
End Sub

Quando a propriedade .Visible do rótulo estiver definida como False, o evento MouseMove não será acionado, mas as células por trás dele poderão ser clicadas (e vice-versa).

    
por 12.01.2017 / 16:17