Criando evento BeforeDoubleClick para Grafico Excel VBA
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Option Explicit Public WithEvents clsCht As Chart Private Sub clsCht_BeforeDoubleClick(ByVal ElementID As Long, _ ByVal Arg1 As Long, _ ByVal Arg2 As Long, _ Cancel As Boolean) Dim clsStr As String Select Case ElementID Case xlAxis: clsStr = "Axis" Case xlAxisTitle: clsStr = "AxisTitle" Case xlDisplayUnitLabel: clsStr = "DisplayUnitLabel" Case xlMajorGridlines: clsStr = "MajorGridlines" Case xlMinorGridlines: clsStr = "MinorGridlines" Case xlPivotChartDropZone: clsStr = "PivotChartDropZone" Case xlPivotChartFieldButton: clsStr = "PivotChartFieldButton" Case xlDownBars: clsStr = "DownBars" Case xlDropLines: clsStr = "DropLines" Case xlHiLoLines: clsStr = "HiLoLines" Case xlRadarAxisLabels: clsStr = "RadarAxisLabels" Case xlSeriesLines: clsStr = "SeriesLines" Case xlUpBars: clsStr = "UpBars" Case xlChartArea: clsStr = "ChartArea" Case xlChartTitle: clsStr = "ChartTitle" Case xlCorners: clsStr = "Corners" Case xlDataTable: clsStr = "DataTable" Case xlFloor: clsStr = "Floor" Case xlLegend: clsStr = "Legend" Case xlNothing: clsStr = "Nothing" Case xlPlotArea: clsStr = "PlotArea" Case xlWalls: clsStr = "Walls" Case xlDataLabel: clsStr = "DataLabel" Case xlErrorBars: clsStr = "ErrorBars" Case xlLegendEntry: clsStr = "LegendEntry" Case xlLegendKey: clsStr = "LegendKey" Case xlSeries: clsStr = "Series" Case xlTrendline: clsStr = "Trendline" Case xlXErrorBars: clsStr = "XErrorBars" Case xlYErrorBars: clsStr = "YErrorBars" Case xlShape: clsStr = "Shape" End Select MsgBox clsStr & vbCrLf & _ "Argumento 1 " & Arg1 & "Argumento 2 " & Arg2 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 |
Execute o código InitializeChartEvent e a cada vez que de um duplo clique no gráfico ele disparar o evento codificado que nesse caso irá abrir uma caixa de mensagem com o nome do gráfico e o argumento 1 e 2 de cada elemento do grafico.
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.