Criando evento MouseDown para Grafico Excel
O Excel VBA possui vários eventos que podem ser utilizado pelo usuário, mas em determinadas situações não atende a necessidade especificas, nessa postagem vou demonstrar como estender eventos para gráficos.
1) Entre no VBA depois em clique em Inserir>Módulo de classe.
2) Click no módulo para seleciona-lo depois nas Propriedades do módulo altere o nome para ChartEventCls.
3) Ao final o resultado deve ser como a a imagem abaixo.
De um duplo click no módulo de classe, copie e cole o código abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Option Explicit Public WithEvents clsCht As Chart Private Sub clsCht_MouseDown(ByVal Button As Long, _ ByVal Shift As Long, _ ByVal x As Long, _ ByVal y As Long) Dim strTexto As String Select Case Shift Case 0 Case 1: strTexto = "Shift + " Case 2: strTexto = "Ctrl + " Case 4: strTexto = "Alt + " End Select Select Case Button Case xlPrimaryButton: strTexto = strTexto & "botão esquerdo" Case xlSecondaryButton: strTexto = strTexto & "botão direito" End Select strTexto = strTexto & vbCrLf strTexto = strTexto & "Posição X:=" & x & " Posição Y:=" & y MsgBox strTexto End Sub |
Pronto!!! Já criamos esse evento para todos os gráficos, mas agora vamos precisar inicializar esse evento para que comece a ser utilizado, para isso vamos criar uma rotina em um módulo.
1) Entre no VBA depois em Inserir>Módulo
2) Ao final o resultado deve ser como a a imagem abaixo.
De um duplo click no módulo, copie e cole o código abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Option Explicit 'Criando variavel de objeto para evento Dim objChtCls As New ChartEventCls 'Inicialiando o evento Sub InitializeChartEvent() Set objChtCls.clsCht = Worksheets(1).ChartObjects(1).Chart End Sub 'Finalizando o evento Sub finalizeCharEvent() Set objChtCls.clsCht = Nothing End Sub |
Nesse exemplo mostrei como dar o start manualmente por uma rotina, mas nada impede a execução por um evento padrão tipo open.
Clique aqui para baixar o arquivo desse passo a passo.