Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Grafikteil Farbfläche Farbe anzeigen

Forumthread: Grafikteil Farbfläche Farbe anzeigen

Grafikteil Farbfläche Farbe anzeigen
10.11.2024 17:49:16
Dieter(Drummer)
Guten Tag an alle.

Anbei meine Musterdatei, in der eine Kreisgrafik mit 3 Teilen ist. Jeder Teil, Points 1-3 hat unterschiedliche Farben, die ich per Makro zuweise. Das Klappt prima.
https://www.herber.de/bbs/user/173504.xlsm

Ich suche einen Code, der per MsgBox die Farbe anzeigt, bei Klick auf die einzelne Farbfläche (Points) des Kreisdiagramms.
Ich habe bisher keine Möglichkeit gefunden und bitte um Hilfe.

Gruß,
Dieter(Drummer)
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 23:35:09
volti
Hallo Dieter,

vielleicht kann hier auch ein ColorPicker helfen.
Beim Klick auf die Grafik wird der ColorPicker aufgerufen (Event entsprechend programmieren) und zeigt Dir die Farbe an der momentanen Cursorposition an.

Hier ein Beispiel:

Code:


Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare PtrSafe Function GetPixel Lib "gdi32" ( _ ByVal hdc As LongPtr, ByVal x As Long, ByVal y As Long) As Long Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr Private Type POINTAPI x As Long y As Long End Type Sub PixelColorPicker() Dim PT As POINTAPI, oCol As Long, sRGB As String, sHEX As String Dim iRed As Integer, iGreen As Integer, iBlue As Integer GetCursorPos PT oCol = GetPixel(GetDC(GetDesktopWindow()), PT.x, PT.y) sHEX = Right("00" & Hex(oCol And vbRed), 2) _ & Right("00" & Hex((oCol And vbGreen) \ &H100), 2) _ & Right("00" & Hex((oCol And vbBlue) \ &H10000), 2) sRGB = CStr(oCol And vbRed) & ", " _ & CStr((oCol And vbGreen) \ 256) & ", " _ & CStr((oCol And vbBlue) \ 65281) MsgBox "Pixelfarbe der aktuellen Position:" _ & vbLf & "Pos:" & vbTab & "x: " & PT.x & ", y:" & PT.y _ & vbLf & vbTab & "Rot Grün Blau" _ & vbLf & "RGB:" & vbTab & sRGB _ & vbLf & "Hex:" & vbTab & "#" & sHEX _ & vbLf & "Farbe:" & vbTab & oCol, vbInformation, _ "Pixelfarbe" End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 12:39:17
Dieter(Drummer)
Danke Karl-Heinz,

danke für deinen Code, und klappt ja prima.

Gruß und Danke,
Dieter(Drummer)
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 20:29:49
Dieter(Drummer)
Danke Uwe für Rückmeldung und den Code,

der gut funktioniert.

Meine Vorstellung war wohl, wenn ich ich z.B. auf ein Drittel klicke, dass dann per MsgBox z.B. der Farbwert mit RGB Werten angezeigt wird.
Z.B. bei rot, als (255,0,0).

Hast Du da auch noch eine Variante?

Gruß,
Dieter(Drummer)
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 22:46:24
Alwin Weisangler
Hallo Dieter,

ich stecke nicht so tief in den Elementen eines Chartobjects drin. Ein Child was die Farbwerte eines ChartElement ausgibt konnte ich nicht finden. Vielleicht habe ich es nur in den Vorschlägen der Intellisense übersehen/überlesen.
Das was ich dir gezeigt habe ist der Weg zur Auswertung von X/Y Koordinaten, welches die Funktion .GetChartElement verarbeitet und 3 Parameter zurückgibt (siehe VBA Hilfe). Diese 3 müssen übergeben werden auch wenn nur der 3. Wert (Diagrammpunkt 1./2./3. Tabelleneintrag) ausgewertet wird.
Vielleicht kann da jemand, welcher tiefer in der Materie Chartobjects drin steckt weiterhelfen.

Gruß Uwe
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 22:54:15
Dieter(Drummer)
Danke Uwe für Info.

Mal sehen, ob da jemand nach helfen kann.

Im Grunde siche ich eine Lösung, dass per Klick auf die Diagrammfläche, die RGB Werte per MsgBox gezeigt werden. Es können ja auch mal andere Farben sein.

Gruß und dennoch Danke.
Dieter(Drummer)
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 23:20:49
Alwin Weisangler
Mal unabhängig von Vorschlägen anderer Helfer - wie wäre es mit so einer Lösung:
in Klasse cls_Chart:


Option Explicit
Public WithEvents objChart As Chart

Private Sub objChart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim Id_Element&, iKtoS&, iPunkt&, i&, strTxt$
objChart.GetChartElement x, y, Id_Element, iKtoS, iPunkt
For i = 3 To 5
Tabelle1.Shapes("Ellipse " & i).Fill.ForeColor.RGB = RGB(191, 191, 191)
Next i
If iPunkt = 1 Then Tabelle1.Shapes("Ellipse 5").Fill.ForeColor.RGB = RGB(0, 176, 80)
If iPunkt = 2 Then Tabelle1.Shapes("Ellipse 4").Fill.ForeColor.RGB = RGB(255, 255, 0)
If iPunkt = 3 Then Tabelle1.Shapes("Ellipse 3").Fill.ForeColor.RGB = RGB(255, 0, 0)
End Sub



Gruß Uwe
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 23:25:04
Alwin Weisangler
dies wäre auch mit MouseMove praktikabel.
1x ins Chartobjekt klicken und dann mit dem Cursor über das Chartelement wird das passende Shape gefärbt.
AW: Grafikteil Farbfläche Farbe anzeigen
10.11.2024 23:45:42
Alwin Weisangler
doch noch entdeckt:



Private Sub objChart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim Id_Element&, iKtoS&, iPunkt&, i&, strTxt$
Dim color As Long, r As Long, g As Long, b As Long
objChart.GetChartElement x, y, Id_Element, iKtoS, iPunkt
For i = 3 To 5
Tabelle1.Shapes("Ellipse " & i).Fill.ForeColor.RGB = RGB(191, 191, 191)
Next i
If iPunkt > 0 Then color = objChart.SeriesCollection(1).Points(iPunkt).Fill.ForeColor
r = color Mod 256
g = color \ 256 Mod 256
b = color \ 65536 Mod 256
If iPunkt > 0 Then MsgBox "RGB (" & r & ", " & g & ", " & b & ")"
End Sub


Gruß Uwe
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 09:45:55
Dieter(Drummer)
Guten Morgen Uwe.

Danke für deinen Code.

Ich komme leider nicht klar damit.
Wenn ich mit der Mouse über eine Drittel gehe, soll mir nur die Farbe, z.B. 255,0,0 gezeigt werden, wenn das Drittel rot ist.
Die Farbe für Drittel soll nicht per Code gesetzt werden.
Es reicht, wenn ich mit der Mouse über Drittel gehe, soll die jeweilige Farbe mit RGB Werten gezeigt werden.

Es kann sein, dass ich den Code nicht richtig eingefügt habe. Hier ist meine jetzige Datei mit deinem Code.
https://www.herber.de/bbs/user/173514.xlsm
Evtl. kannst du mir ja nochmal helfen.

Mit Gruß,
Dieter(Drummer)
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 10:02:28
Alwin Weisangler
Hallo Klaus,

warum nicht im Ribbon. Da stört dann weder ein Userform über dem Tabellenblatt noch verschwindet beim Scrollen der CommandButton.
Den für die Bearbeitung des XML notwendigen Office RibbonX Editor gibt es auf GitHub.
Es muss auch beim öffnen der Datei die Klasse initialisiert werden.
Wenn du auf die MsgBox verzichtest kann du auch via Mousemove ausgeben.
https://www.herber.de/bbs/user/173515.xlsm

Gruß Uwe
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 11:09:02
Alwin Weisangler
Hallo Dieter,

irgendwie war da was mit dem Text durcheinander geraden.
Also der Reihe nach.
Die Ereignisprozedur muss ins Klassenmodul.
Dann muss die Klasse auch beim Öffnen der Datei initialisiert werden.
Ich habe die für die Klasse relevante Objektvariable in ein Propperty gepackt, damit das Objekt bei Fehler erhalten bleibt.
Grund: Public Variablen verlieren ihren Inhalt bei Fehler.
https://www.herber.de/bbs/user/173517.xlsm


Gruß Uwe
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 12:53:39
Dieter(Drummer)
Danke Uwe,

jetzt klappt das prima.

Herzlichen Dank und Gruß,
Dieter(Drummer)
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 11:07:23
Beverly
Hi,

du hast den Code für das Initialisieren des Diagramms vergessen, deshalb KANN es nicht funktinieren.

Außerdem: bei eingebetteten Diagrammobjekten kann es häuig vorkommen, dass die Initialisierung "verloren geht", sodass die darin zugewiesene(n) Event-Prozedur(en), die beim Überfahren der Datenpunkte ausgeführt werden soll(en), dann nicht mehr aufgerufen wird(werden). Verwende besser ein Diagrammblatt, denn bei diesem sind die Eventprozeduren bereits integriert und müssen dem Diagramm nicht erst zugewiesen werden.

Dabei müssen allerdings deine anderen Codes, die den Datenpunkten die Farbe zuweisen, entsprechend angepasst werden und nicht mehr das eingebettete Diagramm sondern das Diagrammblatt ansprechen.

https://www.herber.de/bbs/user/173516.xlsm

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Grafikteil Farbfläche Farbe anzeigen
11.11.2024 12:50:43
Dieter(Drummer)
Danke Karin,

das klappt prima ...

Gruß und Danke,
Dieter(Drummer)
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18