Excel Vba

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.

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.

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.

Deixe uma resposta