Certifique-se de que seu código no item de lista nº 4 precisa estar no módulo de classe para myChartClass e não no código Sheet1 .
EDIT (para resolver o erro 'membro não encontrado'): Revise o código da etapa 4 para:
Private Sub MyChartClass_BeforeDoubleClick(ByVal ElementID As Long, _
ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)
Select Case ElementID
Case xlLegend
Me.MyChartClass.HasLegend = False
Cancel = True
Case xlAxis
Me.MyChartClass.HasLegend = True
Cancel = True
End Select
End Sub
A única alteração é a inserção de MyChartClass entre Me e HasLegend nos dois locais em que ocorrem.
Por que isso funciona: Me refere-se à instância do módulo de classe que o contém, cl_ChartEvents , que não é o que foi vinculado ao gráfico de interesse. O objeto MyChartClass é o que está vinculado ao Chart . (Um nome melhor para MyChartClass provavelmente seria MyChartObj , ou algo assim.) Portanto, é preciso detalhar em Me.MyChartClass para manipular o limite Chart .
EDIT 2 (para fornecer código para aplicar o tratamento personalizado de eventos a todos os gráficos de uma pasta de trabalho): Substitua o código da etapa 3 pelo seguinte:
Dim ChartColl As New Collection
Sub LinkCharts()
Dim workCls As cl_ChartEvents
Dim ws As Worksheet
Dim ch As Chart, chob As ChartObject
' Link all standalone charts
For Each ch In ActiveWorkbook.Charts
' Must create a new instance of the class for each chart
Set workCls = New cl_ChartEvents
' Link each chart to the myChartClass member of the new class instance
Set workCls.myChartClass = ch
' Add the new instance of the class into the Collection object
ChartColl.Add workCls
Next ch
' Link all charts in objects in sheets
For Each ws In ActiveWorkbook.Worksheets
For Each chob In ws.ChartObjects
Set workCls = New cl_ChartEvents
Set workCls.myChartClass = chob.Chart
ChartColl.Add workCls
Next chob
Next ws
End Sub
Sub UnlinkCharts()
' Removing the cl_ChartEvents instances from the Collection causes
' causes them to be destroyed by garbage collection
Do Until ChartColl.Count = 0
ChartColl.Remove 1
Loop
End Sub
Se você quiser que apenas determinados gráficos da pasta de trabalho sejam modificados, a solução estará mais envolvida. Você terá que encontrar alguma maneira de marcar os gráficos que deseja modificar ou os gráficos que não deseja modificar. e verifique cada gráfico conforme você se depara com a marca. Muito factível, no entanto.