Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1636to1640
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textfeld Popup bei Klick auf Datenpunkt im Diagram

Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 09:23:27
Sarah
Hallo zusammen,
ich habe ein Liniendiagramm mit Datenpunkten. Außerdem habe ich so viele Textfelder erstellt, wie es Datenpunkte gibt. Wenn ich einen Datenpunkt anklicke (noch schöner: wenn ich mit der Maus über den Punkt fahre), soll das entsprechende Textfeld sichtbar werden.
Mein bisherhiger Ansatz ist vollkommen sinnlos:
Sub Textfeld()
ActiveSheet.ChartObjects("Diagramm 4").Activate
If ActiveChart.FullSeriesCollection(6).Points(6).Select = True Then
ActiveSheet.Shapes.Range(Array("Textfeld 1")).Visible = True
Else
If ActiveChart.FullSeriesCollection(6).Points(6).Select = False Then
ActiveSheet.Shapes.Range(Array("Textfeld 1")).Visible = False
Else
End If
End If
End Sub
Hat jemand einen Tipp für mich?

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 10:04:06
Daniel
HI
da sich bei Diagrammen im Laufe der Versionen relativ viel geändert hat, wäre deine Excelversion schon relevant.
Ab Excel 2013 ist es beispielsweise möglich, als Datenbeschriftung am Datenpunkt einen Freitext aus einer Zelle anzeigen zu lassen. Dieser wird dann änhlich wie die Werte aus der Tabelle gelesen.
Auch wenn diese Beschriftung dann permanent sichtbar ist, vielleicht löst sie dein Problem?
Gruß Daniel
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 10:22:07
Sarah
Danke für die schnelle Antwort. Ich verwende Excel 2016. Allerdings wäre eine permanente Darstellung aller Kommentare bei der Anzahl meiner Datenpunkte sehr unübersichtlich.
Trotzdem würde mich interessieren, wie die von dir vorgeschlagene Lösung funktioniert, zusätzlich zu einem Lösungsansatz für mein Problem :-) .
Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 13:29:25
Daniel
Hi
Im Kontextmenü des Diagramms
Zunächst Datenbeschriftungen anzeigen
Dann Datenbeschriftungen formatieren
Dort kannst du irgendwo auswählen, was angezeigt werden soll und da gibt es die Option " aus Zellen"
Da kannst du dann den Zellbereich auswählen, aus dem die Beschriftung für die Datenreihe gewählt werden soll.
Diese Zellen sollten in der Tabelle parallel zu den Wertezellen liegen.
Gruß Daniel
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 11:23:06
Nepumuk
Hallo Sarah,
das Diagramm als Diagrammblatt oder eingebettet in eine Tabelle?
Gruß
Nepumuk
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 12:07:59
Sarah
Der Reiter enthält mehrere Diagramme, die ich manuell aus dem Tabellenreiter mit den Daten, auf die sich das Diagramm bezieht, ausgeschnitten und eingefügt habe. Also ich glaube, es ist kein Diagrammblatt.
Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 12:13:03
Nepumuk
Hallo Sarah,
soll das nur bei einem Diagramm passieren oder bei allen?
Gruß
Nepumuk
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 12:21:04
Sarah
Hallo Nepumuk,
langfristig soll das bei allen möglich sein. Aber jedes Diagramm hat für den jeweiligen Datenpunkt natürlich andere Daten, die erscheinen sollen.
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 13:19:26
Nepumuk
Hallo Sarah,
noch eine Frage, gibt es mehrere Datenreihen im Diagramm oder nur eine?
Gruß
Nepumuk
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 15:06:57
Sarah
Hey :-)
ich seh schon, eine Beispielmappe macht die Sache für die Helfer um Welten leichter :-) :
https://www.herber.de/bbs/user/123234.xlsx
Und ja, es gibt mehrere Datenreihen.
Vielen Dank für deine Beharrlichkeit.
Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
09.08.2018 15:32:57
Nepumuk
Hallo Sarah,
ich habe es dir in deine Mappe eingebaut: https://www.herber.de/bbs/user/123236.xlsm
Die Texte kommen aus der Tabelle Texte in welcher du sie editieren kannst. Die Spalten stehen für die Datenreihen, die Zeilen für die Datenpunkte darauf.
Um das Ganze in deine Originalmappe zu Importieren öffnest du beide Mappen. Dann wechselst du per Tastenkombination Alt+F11 in den VBA-Editor und ziehst mit der Maus das Modul, das Klassenmodul und das UserForm in deine Mappe. Dann kopierst du den Code aus dem Modul "DieseArbeitsmappe" in "DieseArbeitsmappe" der Originaldatei. In diesem Code musst du noch in folgender Zeile:
For Each objChartObject In Worksheets("Daten").ChartObjects
den Namen der Diagrammtabelle an Stelle von "Daten" eintragen. Anschließend kannst du den VBA-Editor mit der Tastenkombination Alt+q schließen.
Kopieren jetzt die Tabelle Texte in deine Mappe und speichere diese als .xlsm Dann die beiden Mappen schließen, das Original wieder öffnen und testen.
Es kann sein dass du noch Fehlermeldungen bekommst, das Ganze ist doch ziemlich komplex. Dann einfach nachfragen.
Gruß
Nepumuk
Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
10.08.2018 08:55:36
Sarah
Wow, perfekt! Ich bin voll begeistert :-) ! Vielen vielen Dank für deine Mühe.
Die Übertragung hat nach ein bisschen rumtüfteln super funktioniert. Vielen Dank auch für die detaillierte Anleitung.
Jetzt poppt das Textfeld ja für 3 Sekunden auf (was man ja im Makro einstellen kann). Wäre es arg viel Aufwand, entweder zu sagen,
- dass das Textfeld solange erscheint, wie man mit der Maus auf dem Punkt ist, oder,
- dass das Feld bei Klick aufpoppt, und bei nochmaligem Klick auf den Datenpunkt wieder verschwindet?
Grüße
Sarah
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
10.08.2018 10:04:39
Nepumuk
Hallo Sarah,
wäre es ok wenn das Textfeld beim Klick darauf verschwindet? Das wäre Programmtechnisch am einfachsten.
Gruß
Nepumuk
Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
10.08.2018 10:35:05
Sarah
Klar, das wäre super.
Noch was anderes: Hab die Tabelle jetzt mal an verschiedenen PCs geöffnet, und an einem hat es beim Userformcode wg. einer 64bit Sache Probleme gegeben. Hab dann mal PtrSafe und LongPtr an den Stellen eingefügt, wo ich dachte, dass es hinkommen könnte, dann war der Fehler weg, weiß aber nicht, ob das alles so korrekt ist:
Option Explicit
Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" ( _
lpPoint As POINTAPI) As LongPtr
Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
ByVal nIndex As Long) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByRef lpRect As RECT) As LongPtr
Private Declare PtrSafe Function GetWindowLongA Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLongA Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _
ByVal hWnd As Long) As Long
Private Declare PtrSafe Function IsThemeActive Lib "uxtheme.dll" () As LongPtr
Private Const GC_CLASSNAMEMSEXCELFORM = "ThunderDFrame"
Private Const GWL_STYLE = -16&
Private Const WS_CAPTION = &HC00000
Private Const SM_CXSCREEN As Long = 0&
Private Const SM_CYSCREEN As Long = 1&
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
X As Long
Y As Long
End Type
Private hWndForm As Long

Anzeige
AW: Textfeld Popup bei Klick auf Datenpunkt im Diagram
10.08.2018 11:38:08
Nepumuk
Hallo Sarah,
nein, das ist nicht ganz korrekt (nur gefühlt).
Ändere den gesamten Code im Modul des UserForms so:
Option Explicit

Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" ( _
    ByRef lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
#If Win64 Then
Private Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As LongPtr) As LongPtr
#Else
Private Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As LongPtr) As LongPtr
#End If
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function IsThemeActive Lib "uxtheme.dll" () As Long

Private Const GC_CLASSNAMEMSEXCELFORM = "ThunderDFrame"
Private Const GWL_STYLE = -16&
Private Const WS_CAPTION = &HC00000
Private Const SM_CXSCREEN As Long = 0&
Private Const SM_CYSCREEN As Long = 1&

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private hWndForm As Long

Private Sub Label1_Click()
    Call Unload(Object:=Me)
End Sub

Private Sub UserForm_Activate()
    Dim lngptrHwnd As LongPtr, lngptrStyle As LongPtr
    lngptrHwnd = FindWindowA(GC_CLASSNAMEMSEXCELFORM, Caption)
    lngptrStyle = GetWindowLongPtr(lngptrHwnd, GWL_STYLE)
    lngptrStyle = lngptrStyle And Not WS_CAPTION
    Call SetWindowLongPtr(lngptrHwnd, GWL_STYLE, lngptrStyle)
    Call DrawMenuBar(lngptrHwnd)
    If IsThemeActive = 1 Then
        Height = Height - 16
    Else
        Height = Height - 14
    End If
End Sub

Private Sub UserForm_Initialize()
    Const CONVERSION_FACTOR As Single = 0.75
    Dim udtCursorPos As POINTAPI
    Call GetCursorPos(udtCursorPos)
    If udtCursorPos.X * CONVERSION_FACTOR + Width > _
        GetSystemMetrics(SM_CXSCREEN) * CONVERSION_FACTOR Then
        Left = udtCursorPos.X * CONVERSION_FACTOR - Width
    Else
        Left = udtCursorPos.X * CONVERSION_FACTOR
    End If
    Top = (udtCursorPos.Y - Height) * CONVERSION_FACTOR
End Sub

Und den Code im Modul ersetzt du mit diesem:
Option Explicit
Option Private Module

Public Sub ShowText(ByVal pvstrChartName As String, ByVal pvlngArgument1 As Long, ByVal pvlngArgument2 As Long)
    Dim avntChartnameArray As Variant
    Dim strChartname As String
    Dim objCell As Range
    avntChartnameArray = Split(pvstrChartName, " ")
    strChartname = avntChartnameArray(UBound(avntChartnameArray) - 1) & " " & avntChartnameArray(UBound(avntChartnameArray))
    Set objCell = Worksheets("Texte").Columns(1).Find(What:=strChartname, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
    If Not objCell Is Nothing Then
        With frmChartText
            .Label1.Caption = objCell.Offset(pvlngArgument2, pvlngArgument1 - 1).Text
            Call .Show
        End With
    Else
        Call MsgBox("Keine Texte für Diagramm ''" & strChartname & "'' gefunden.", vbExclamation, "Hinweis")
    End If
End Sub

Gruß
Nepumuk
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige