Office: Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern

Helfe beim Thema Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, egal, was ich tue, es gelingt mir nicht. Aber sicher kennt jemand eine Lösung. Ich möchte in VBA den Zeilenwert der Tabelle für einen... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Pfefferminztee, 16. Mai 2025.

  1. Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern


    Hallo zusammen,
    egal, was ich tue, es gelingt mir nicht. Aber sicher kennt jemand eine Lösung.

    Ich möchte in VBA den Zeilenwert der Tabelle für einen Datenpunkt im Diagramm zurück bekommen. Klingt einfach, ist es aber nicht. Bei mir wird beim Klick immer die ElementID=19 zurück gegeben, das ist die Fläche, aber nicht der Datenpunkt bzw. der Marker.
    Hab mal ein LowLevel-Sheet ohne VBA mit hinzugefügt, damit man weis, was ich meine.
    Ich möchte z.B. auf den Datenpunkt Y=59,6 klicken und dann den Zeilenwert 39 bekommen (nicht den Wert der Spalte B). Erstmal reicht es in einer Messagbox ;-)

    Vielen Dank und viele Grüße
     
    Pfefferminztee, 16. Mai 2025
    #1
  2. BoskoBiati Erfahrener User
  3. Hab mir das bei Herbers mal angesehen, leider finde ich darin nicht die Lösung zu meinem Problem.
    Wie geschrieben, ich möchte den Datenpunkt mit der Maus anklicken und dann die Zeilennummer des Punktes in der Tabelle zurück bekommen. Trotzdem Dankeschön ‍♂️
     
    Pfefferminztee, 16. Mai 2025
    #3
  4. OilMax Erfahrener User

    Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern

    Hallo,

    für das was du möchtest braucht es VBA, da du ein Event auswerten musst.
    2 grundsätzlich möglich Wege gibt es da. Entweder in einer Klasse oder das Diagramm verschieben in ein neues Blatt (Diagramm1)
    Dann kannst du entweder dem mit _MouseDown oder _MousOver Ereignis den Knoten (x/y) auswerten und die Zahl in Spalte A suchen und Zeilennummer ausgeben.
    Der einfache Weg:
    Diagramm --> rechtsklick --> Verschieben --> Alt/F11 --> Modul Diagramm Doppelklick und Einfügen ins Diagramm1 Modul:
    Code:
    Option Explicit
    Private Const SHNAME As String = "ChartTip"
    Dim ChartTitel$
    Dim shInfo As Shape
    
    Private Sub Chart_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
        Dim Id_Element&, iWert As Variant, iKtoS&, iPunkt&, i&, strTxt$
        Dim varX, varRow
        Dim sh As Shape
        For Each sh In ActiveChart.Shapes
            If sh.Name = SHNAME Then
                sh.Delete
                Set shInfo = Nothing
            End If
        Next
        With Tabelle1
            ActiveChart.GetChartElement x, y, Id_Element, iKtoS, iPunkt
            If ChartTitel <> "" Then ActiveChart.ChartTitle.Text = ChartTitel
            If Not shInfo Is Nothing Then
                If Id_Element <> xlSeries Then shInfo.TextFrame.Characters.Text = "": Exit Sub
            End If
            If iPunkt > 0 Then
                varX = Application.Index(ActiveChart.SeriesCollection(iKtoS).XValues, iPunkt)
                If IsError(varX) Then
                    Exit Sub
                End If
                iWert = Application.Match(varX, .Columns(1), 0)
                If Not IsError(iWert) Then varRow = iWert
                With ActiveChart
                    Set shInfo = .Shapes.AddShape(1, 0.65 * x, 0.65 * y - 45, 125, 38)
                    shInfo.Name = SHNAME
                End With
                 strTxt = "Zeile: " & varRow
                If Not shInfo Is Nothing Then
                    shInfo.TextFrame.Characters.Text = strTxt
                    shInfo.TextFrame.Characters.Font.Size = 12
                    shInfo.TextFrame.Characters.Font.Color = vbBlack
                    shInfo.BackgroundStyle = msoBackgroundStylePreset10
                End If
            End If
        End With
    End Sub
    Gruß Uwe
     
    OilMax, 17. Mai 2025
    #4
    1 Person gefällt das.
  5. Beverly
    Beverly Erfahrener User
    Beverly, 17. Mai 2025
    #5
    1 Person gefällt das.
  6. OilMax Erfahrener User
    Hallo,

    Es hatte an der Tür geklingelt und somit musste es schnell gehen.
    Falls Diagramm verschieben keine Option ist hier nun der Weg via Klasse:
    in ein allgemeines Modul:
    Code:
    Option Explicit
        Dim oCh As New cls_Chart
    
    Sub InitializeChart()
        Dim objCh As Object
        Set objCh = Tabelle1.ChartObjects("Diagramm 2")
        Set oCh.objChart = objCh.Chart
    End Sub
    
    in ein Klassenmodul Namens: cls_Chart
    Code:
    Option Explicit
        Private WithEvents m_objChart As Chart
        Private Const SHNAME As String = "ChartTip"
        Private ChartTitel$
        Private shInfo As Shape
       
    Property Set objChart(objChart As Object)
        Set m_objChart = objChart
    End Property
    
    Property Get objChart() As Object
        Set objChart = m_objChart
    End Property
    
    Private Sub m_objChart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
        Dim Id_Element&, iWert As Variant, iKtoS&, iPunkt&, strTxt$
        Dim varX, varRow
        Dim sh As Shape
        For Each sh In m_objChart.Shapes
            If sh.Name = SHNAME Then
                sh.Delete
                Set shInfo = Nothing
            End If
        Next
        With Tabelle1
            m_objChart.GetChartElement x, y, Id_Element, iKtoS, iPunkt
            If ChartTitel <> "" Then m_objChart.ChartTitle.Text = ChartTitel
            If Not shInfo Is Nothing Then
                If Id_Element <> xlSeries Then shInfo.TextFrame.Characters.Text = "": Exit Sub
            End If
            If iPunkt > 0 Then
                varX = Application.Index(m_objChart.SeriesCollection(iKtoS).XValues, iPunkt)
                If IsError(varX) Then
                    Exit Sub
                End If
                iWert = Application.Match(varX, .Columns(1), 0)
                If Not IsError(iWert) Then varRow = iWert
                With m_objChart
                    Set shInfo = .Shapes.AddShape(1, 20, 10, 70, 20)
                    shInfo.Name = SHNAME
                End With
                 strTxt = "Zeile: " & varRow
                If Not shInfo Is Nothing Then
                    shInfo.TextFrame.Characters.Text = strTxt
                    shInfo.TextFrame.Characters.Font.Size = 12
                    shInfo.TextFrame.Characters.Font.color = vbBlack
                    shInfo.BackgroundStyle = msoBackgroundStylePreset10
                End If
            End If
        End With
    End Sub
    
    Um die Klasse zu registrieren muss du im allgemeinen Modul die Prozedur: InitializeChart ausführen.
    Statt _MouseDown kannst du natürlich auch _MouseMove verwenden.

    Gruß Uwe
     
    OilMax, 17. Mai 2025
    #6
    1 Person gefällt das.
  7. Hallo OilMax, hallo Namensvetter Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern *;)*
    vielen Dank für deine Hilfe, läuft!
    Super!
    Hallo Karin, wir hatten schon einmal bei einem anderen Thema das ausgiebige Vergnügen und das Ergebnis war perfekt!
    Diesmal hab ich den bequemen Weg von Uwe genommen Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern *:D*

    Seid lieb gegrüßt und ein wunderbares Wochenende
    Uwe
     
    Pfefferminztee, 17. Mai 2025
    #7
  8. Beverly
    Beverly Erfahrener User

    Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern

    Hi Uwe,

    nur ein Hinweis am Rande: du solltest den Code für das Initialisieren des/der Diagramme automatisch ausführen (wie z.B. bei meinen Code) - andernfalls musst du das Makro dazu öfters von Hand neu starten. Das Problem dieser Art der Klassenprogrammierung von Diagrammen ist nämlich, dass der Code immer wieder mal die initialisierte Klasse "vergisst" und dann beim Klick oder Mouse-Over nichts mehr angezeigt wird...


    Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern GrußformelKlick auf Datenpunkt im Chart soll Zeilennummer zurückliefern Beverly's Excel - Inn
     
    Beverly, 17. Mai 2025
    #8
    1 Person gefällt das.
  9. OilMax Erfahrener User
    Hallo Karin,

    davon bin ich eigentlich ausgegangen, dass der TO den automatischen Start selbst hinbekommt. Falls nicht siehe Workbook open.
    Das Vergessen passiert eigentlich nur wenn VBA gestoppt wird. Die Propertys sollten eigentlich ihren Inhalt behalten, so es nicht durch irgendwelche AddIns o.ä. Diese entladen werden. Da gab es jüngst erst eine große Sucherei zu diesem Thema.

    Diverse Chartobjekte in Klassen verwaltet habe ich mir für meine kleine Kontoverwaltung/Auswertung schon vor geraumer Zeit mal geschnitzt. Da habe ich es noch nie erlebt, dass es derartige Probleme damit gab.


    Gruß Uwe
     
    Zuletzt bearbeitet: 17. Mai 2025
    OilMax, 17. Mai 2025
    #9
  10. Beverly
    Beverly Erfahrener User
    Hi Uwe,

    das ist richtig, dass das Vergessen insbesondere (aber nicht nur!) dann passiert, wenn VBA unterbrochen wird, was aber leider immer wieder passiert, vor allem wenn man noch mehr Code in der Mappe als nur den für die Diagramme verwendet. Ich weiß natürlich nicht, was du unter "geraumer Zeit" verstehst, aber wenn du auf meiner HP nachschaust wirst du sehen, dass die von mir verlinkte Beispieldatei aus dem Jahr 2010 stammt und ich kann nur bestätigen, dass dieses "Vergessen"-Problem seitdem immer wieder mal (in dieser oder anderen Mappen mit entsprechendem Code), wenn auch äußerst selten, aufgetreten ist. Aus diesem Grund bin ich (nach wie vor) der Meinung, dass es nicht ausreichend ist, die Klasse nur einmalig im Workbook-Open-Ereignis zu initialisieren sondern - aus Socherheitsgründen für die Funktionalität der Mappe - zwischendurch immer wieder erfolgen sollte (siehe meine Beispielmappe).


    Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern GrußformelKlick auf Datenpunkt im Chart soll Zeilennummer zurückliefern Beverly's Excel - Inn
     
    Beverly, 17. Mai 2025
    #10
  11. OilMax Erfahrener User
    Hallo Karin,

    ja, das Ding mit Public Variablen in Klasse ist, dass es bei Fehlern diese leer schießt. Mit der Property Anweisung passiert so was nur, wenn von außen die Property in unglücklich programmierten Sachen entladen wird. Es ist sicherlich kein Allheilmittel, aber ein Weg zu besserer Stabilität.
    Die Sicherheitsmaßnahme per Doppelklick die Klasse neu zu initialisieren ist auf jeden Fall eine Möglichkeit.

    Gruß Uwe
     
    OilMax, 17. Mai 2025
    #11
Thema:

Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern

Die Seite wird geladen...
  1. Klick auf Datenpunkt im Chart soll Zeilennummer zurückliefern - Similar Threads - Klick Datenpunkt Chart

  2. Formular Wert per Klick in ein anderes Feld übernehmen

    in Microsoft Access Hilfe
    Formular Wert per Klick in ein anderes Feld übernehmen: Guten Tag Ich bin am Anschlag und brauche euer Schwarmwissen. Da ich eher zu den Anfänger gehöre, brauche ich auch einfache Erklärungen, damit ich in Zukunft verstehe. :-D Es handelt sich um...
  3. Zeile per Klick farblich machen auch für weitere Tabellenblätter möglich?

    in Microsoft Excel Hilfe
    Zeile per Klick farblich machen auch für weitere Tabellenblätter möglich?: Hallo. Ich habe mehrere Tabellenblätter. Das 1. Blatt ist Bedingt formatiert mit: =ZEILE()=ZELLE("Zeile") dazu die Farbe grün und dem VBA Code: Target.Calculate (Datei ist im Anhang) Wenn ich...
  4. Klick Schaltfläche Zelle markieren in der die Schaltfläche liegt

    in Microsoft Excel Hilfe
    Klick Schaltfläche Zelle markieren in der die Schaltfläche liegt: Hallo Zusammen Ich bin seit mehreren Tagen am suchen: Ich möchte mit vba (bin Neuling) die Zelle markieren/aktiv setzen die hinter der Schaltfläche liegt. Es gibt mehrere gleiche Schaltflächen...
  5. Zeile einfügen per Button Klick möglich?

    in Microsoft Excel Hilfe
    Zeile einfügen per Button Klick möglich?: Guten Morgen. Ist es möglich, dass man per Klick auf einen Button (siehe bitte Anhang) eine Zeile einfügen kann? Konkretes Beispiel: Klick mit der Maus in das Feld A3 Wenn ich jetzt auf den...
  6. Markieren einer kompletten Textzeile durch einfaches Anklicken möglich?

    in Microsoft Word Hilfe
    Markieren einer kompletten Textzeile durch einfaches Anklicken möglich?: Hallo zusammen, für eine Programmierung benötige ich viele einzelne Kommandozeilen, die ich von einem Word Dokument dann copy&paste benutze. Jedoch muss ich immer die Zeile aufwendig mit der Maus...
  7. 1-Klick-Voreinstellung, Anhänge drucken

    in Microsoft Outlook Hilfe
    1-Klick-Voreinstellung, Anhänge drucken: Moin zusammen, ich muss häufig E-Mails und Anhänge ausdrucken. Dabei muss das Einzugsfach geändert werden. Dafür habe ich mir eine 1-Klick-Voreinstellung angelegt. Gibt es einen kurzen...
  8. Langsame Animation weiterlaufen lassen trotz Klick in die Präsentation?

    in Microsoft PowerPoint Hilfe
    Langsame Animation weiterlaufen lassen trotz Klick in die Präsentation?: Hallo zusammen, ich habe eine Grafik in meiner Präsentation, die über einige Minuten ganz langsam verblassen soll. Währenddessen soll die Präsentation ganz normal weiterlaufen, gesteuert per...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden