aximand
Goto Top

Click in ChartObject bzw. Points

Hallo, ich erzeuge zur Laufzeit bei einem Klick auf ein Postleitzahlgebiet über ein Label ein Säulendiagramm, was mir den Umsatz des Vorjahres und des aktuellen Jahres anzeigt.

Ich habe also 2 Balken (2018/2019) in meiner Grafik.

Nun möchte ich, dass beim Klick auf einen Balken weitere Details dazu abgerufen werden.
Ich finde aber kein Click-Ereignis wir bei einem Label lblXYZ_Click() so dass ein Klick auf die blaue oder orangene Säule irgendwas triggert.

Alternativ könnte man auch sowas wie:

 ActiveChart.FullSeriesCollection(2).Points(1).Select
verwurschteln - aber dann müsste ich das Select ja auch irgendwie abfragen, abgreifen.


Gibt es da etwas analog für die Säulen= Points?

Das wäre super!
klick

Content-ID: 526165

Url: https://administrator.de/contentid/526165

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

142232
142232 16.12.2019 aktualisiert um 14:50:16 Uhr
Goto Top
https://docs.microsoft.com/de-de/office/vba/api/excel.chart.select(even)

In das Sheet kopieren auf dem der Chart liegt. (ChartObject Index natürlich anpassen).
Dann Worksheet aktivieren und auf die Serien klicken.
Dim WithEvents myChart As Chart

Private Sub myChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
    If ElementID = 3 Then
        Select Case Arg1
            Case 1:
                MsgBox "Clicked Series 1"  
            Case 2:
                MsgBox "Clicked Series 2"  
        End Select
    End If
End Sub

Private Sub Worksheet_Activate()
    With ActiveSheet
        Set myChart = .ChartObjects(1).Chart
    End With
End Sub
Aximand
Aximand 17.12.2019 um 10:04:41 Uhr
Goto Top
Diese Codeschnippsel hatte ich auch sccon auf der MS-Seite gefunden. Bewirkt allerdings irgendwie nichts. Mein ursprünglicher Code wie folgt:

Man klickt ein Label auf dem Tabellenblatt (z.B. lbl03) an:

Private Sub lbl03_Click()
Diagramm_Jahr (3) 'Ziffer= PLZ-Gebiet  
End Sub

Es wird die folgende Routine aufgerufen:

Sub Diagramm_Jahr(intplz As Integer)   'intplz  = PLZ-Gebiet  
ActiveSheet.Unprotect
Dim strPLZ As String ' um führende 0 bei "einstelligen" PLZ im Diagramm mit anzugeben  
Dim intJahr As Integer

intJahr = Year(Date)

If bJahr = False Then 'wird durch einen Klick auf Button aktuelles Jahr / Vorjahr gesetzt  
    intJahr = intJahr - 1
ElseIf bJahr = True Then
    intJahr = intJahr
    End If
    

' löschen aller Diagramme  
    Dim lngZahl As Long
    With ActiveSheet
        If .ChartObjects.Count <> 0 Then
        For lngZahl = .ChartObjects.Count To 1 Step -1
            .ChartObjects(lngZahl).Delete
        Next lngZahl
        End If
  End With
' löschen ENDE  

Dim Diagramm As Chart
Dim Rahmen As ChartObject

Set Rahmen = ThisWorkbook.Worksheets("Deutschland").ChartObjects.Add(450, 100, 250, 170)  
Set Diagramm = Rahmen.Chart

Diagramm.ChartType = xlLineMarkers
Diagramm.HasTitle = True
Diagramm.ChartTitle.Text = "Umsatz PLZ " & strPLZ & ": " & lngUmsatzAktuellesJahr(1, intplz) & " €"  
With Diagramm

    .Axes(xlValue, xlPrimary).MaximumScale = 60

    .SeriesCollection.NewSeries
         With .SeriesCollection(1)
        .Values = lngUmsatzAktuellesJahr(0, intplz) '1/0 steht für das Jahr (bJahr = 1/0)  
        .Name = "" & (intJahr - 1)  
    End With

    .SeriesCollection.NewSeries
    With .SeriesCollection(2)
        .Values = lngUmsatzAktuellesJahr(1, intplz) '1/0 steht für das Jahr (bJahr = 1/0)  
        .Name = "" & intJahr  
    End With
End With
142232
142232 17.12.2019 aktualisiert um 10:48:45 Uhr
Goto Top
Zitat von @Aximand:

Diese Codeschnippsel hatte ich auch sccon auf der MS-Seite gefunden.
Nö, da musste ich nichts kopieren, den hab ich selbst schnell geschrieben.
Bewirkt allerdings irgendwie nichts.
Geht hier einwandfrei, kann dir gerne die Demo-Mappe zukommen lassen wenn du willst, würde ich ja nicht hier posten wenn's ichs nicht getestet hätte.
Aximand
Aximand 17.12.2019 um 11:38:58 Uhr
Goto Top
das wäre super. Irgendwo scheint der Fehler im Detail zu stecken
142232
Lösung 142232 17.12.2019 um 13:01:24 Uhr
Goto Top
Aximand
Aximand 18.12.2019 um 07:58:46 Uhr
Goto Top
Super, danke. Fehler gefunden.

Das lag wohl daran, dass ich das Chart in einem Modul hab erstellen lassen, anstelle in dem Sheet. Ich hab die Prozedur aus dem Modul ins Sheet gepackt und siehe da - it works.

Hab wohl vor lauter Wald den Baum nicht gesehen - großes Danke!