Anzeige
Archiv - Navigation
840to844
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
840to844
840to844
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

bei klick Punkteigenschaften im Diagramm ändern

bei klick Punkteigenschaften im Diagramm ändern
23.01.2007 18:36:10
Peter
Hallo,
ich hatte folgendes Problem schon einmal reingestellt, bin leider nicht zu einer Lösung gekommen.
Ich beschreibe mein Anliegen noch einmal näher.
1. Ich habe ein x-y-Punktdiagramm.
2. Wenn ich einen Punkt anklicke soll dieser größer werden (Größe soll gleich der Zahl im Blatt "Hilfe" Zelle AR4 sein)(.MarkerSize = Sheets("Hilfe").Range("$AR$4").Value)
3. Außerdem soll dieser Punkt einen schwarzen Rahmen bekommen (MarkerForegroundColor = RGB(0, 0, 0) ' schwarz)
4. Die BackgroundColor soll so bleiben wie sie war.
Ich muß, nachdem ich einen Punkt angeklickt habe, noch wissen welche Farbe er hat (BackgroundColor)und auch welche Farben die anderen Punkte haben.
Diese wird vorher über ein anderes Makro für jeden einzelnen Punkt je nach Auswahl eines anderen Parameters immer neu bestimmt, d.h. die Punkte haben unterschiedliche Farben. Diese unterschiedlichen Farben repräsentieren Noten (von 1-6).
5. Wenn ich einen weiteren Punkt anklicke soll der vorherige seine ursprünglichen Eigenschaften wiederbekommen (MarkerForegroundColor gleich BackgroundColor, Größe gleich Zahl aus Blatt "Hilfe" Zelle AR3, alle Punkte die nicht angeklickt sind bekommen daher ihre Größe)(der angeklickte Punkt erhält die Größe aus AR4 !!!)
Der neu angeklickte Punkt soll sich wie oben beschrieben verhalten, usw..
Ich bitte darum notwendige Anpassungen, in den folgenden, von mir verwendeten und für meine Textbox 87 schon funktionierenden Code, einzubauen.
Meinen Versuch seht Ihr unten.
Dort habe ich nur für Punkt 50 nach klick die Eigenschaften ändern können.
Erläuterungen zur Textbox: (vielleicht wichtig?!)
Der Text für Textbox 87 wird aus Spalte A aus dem TabellenBlatt "Hilfe" ausgelesen, wenn CheckBox 21 ein Häckchen hat. In einer Zeile und in 3 Spalten nebeneinander stehen Text, X-Koordinate, Y-Koordinate. Bei jedem Klick auf einen Punkt wird somit der entsprechende Text ausgelesen.

Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal y As Long)
Dim ElementID As Long, Arg1 As Long, Arg2 As Long
Dim myX As Variant, myY As Double
' kurzzeitig die Aktualisierung der Darstellung unterbrechen
Application.ScreenUpdating = False
With ActiveChart
' Pass x & y, return ElementID and Args
.GetChartElement X, y, ElementID, Arg1, Arg2
' Did we click over a point or data label?
If ElementID = xlSeries Or ElementID = xlDataLabel Then
If Arg2 > 0 Then
' Extract x value from array of x values
myX = WorksheetFunction.Index _
(.SeriesCollection(Arg1).XValues, Arg2)
' Extract y value from array of y values
myY = WorksheetFunction.Index _
(.SeriesCollection(Arg1).Values, Arg2)
' aktuelle Werte für den nächsten klick merken
altx = Arg1
alty = Arg2
' In die Textbox den Text eintragen
If .Shapes("Check Box 21").ControlFormat.Value = 1 Then
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Visible = True
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Select
Selection.Characters.Text = Worksheets("Hilfe").Range("A" & Arg2 + 3)
Else
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Visible = False
End If
'ES GEHT IN ETWA UM DIESEN CODE
' angeklickten Punkt mit schwarzen Rahmen markieren und größer machen
With Charts("Pflanzungs-Karte").SeriesCollection(1).Points(50)
.MarkerForegroundColor = RGB(0, 0, 0)  ' schwarz
.MarkerSize = Sheets("Hilfe").Range("$AR$4").Value
End With
Else
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Visible = False
End If
' Select auf das gesamte Diagramm setzen, damit die Punkte nicht Lila sind
ActiveChart.ChartArea.Select
Else
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Visible = False
End If
End With
' Aktualisierung der Darstellung wieder anschalten
Application.ScreenUpdating = True
End Sub

Danke im voraus
Grüße aus Berlin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bei klick Punkteigenschaften im Diagramm ändern
23.01.2007 22:04:41
Christoph
Hallo Peter,
hier ein Ansatz mit DataLabels
Gruß
Christoph
Option Explicit
Private Const bytSize As Byte = 5
Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Dim lngElmt As Long, lngSer As Long, lngPnt As Long
Dim j As Long, k As Long
Dim varXVal As Variant, dblYVal As Double
Application.ScreenUpdating = False
With ActiveChart
'reset chart:
For j = 1 To .SeriesCollection.Count
.SeriesCollection(j).HasDataLabels = False
For k = 1 To .SeriesCollection(j).Points.Count
With .SeriesCollection(j).Points(k)
If .MarkerSize <> bytSize Then
.MarkerForegroundColorIndex = .MarkerBackgroundColorIndex
.MarkerSize = bytSize
End If
End With
Next
Next
.GetChartElement X, Y, lngElmt, lngSer, lngPnt
If lngElmt = xlSeries Then
If lngPnt > 0 Then
With .SeriesCollection(lngSer)
'get values:
varXVal = Application.Index(.XValues, lngPnt)
dblYVal = Application.Index(.Values, lngPnt)
'mark point:
.Points(lngPnt).MarkerForegroundColor = 1
.Points(lngPnt).MarkerSize = 10
'add DataLabel:
.Points(lngPnt).HasDataLabel = True
With .Points(lngPnt).DataLabel
.Text = "X: " & varXVal & vbLf & "Y: " & dblYVal
.Border.LineStyle = xlNone
.Interior.ColorIndex = 2
.Font.Name = "Arial"
.Font.Size = 8
End With
End With
End If
End If
.Deselect
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: bei klick Punkteigenschaften im Diagramm ändern
24.01.2007 10:58:51
Peter
Hallo Christoph M,
funktioniert so noch nicht ganz,
1. Das Datalabel am Punkt selber brauche ich nicht.
Ich möchte weiterhin die Textbox 87 benutzen.
2. Bei klick auf einen Punkt bekommen auch alle anderen Punkte die neue Größe.
Es soll aber nur der angeklickte Punkt größer werden (Größe aus Zahl im Blatt "Hilfe" Zelle AR4) und nach klick auf einen anderen wieder die Größe aller anderen Punkte bekommen. (Größe aus Zahl im Blatt "Hilfe" Zelle AR3).
Der Rest scheint zu funktionieren.
Könntest du vielleicht noch einmal draufschauen und entsprechende Änderungen machen?!
Danke
Grüße aus Berlin
Anzeige
funktioniert, kleine Ergänzung!
24.01.2007 18:11:46
Peter
Hallo Christoph,
ich habs dann doch noch hinbekommen. Code unten an bei.
Eine kleine Sache hätte ich gerne noch gelöst bekommen.
Ich möchte das die jeweiligen Koordinaten in Zellen eines anderen Tabellenblatts ausgeworfen werden, nicht wie in deinem Code in Datalabel.
Die X-Koordinate in Sheets("Hilfe").Range("$AR$5").
Die Y-Koordinate in Sheets("Hilfe").Range("$AR$6").
Meinen kläglichen Versuch siehst du weiter unten im Code.

Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Dim lngElmt As Long, lngSer As Long, lngPnt As Long
Dim j As Long, k As Long
Dim varXVal As Variant, dblYVal As Double
Application.ScreenUpdating = False
With ActiveChart
'reset chart:
For j = 1 To .SeriesCollection.Count
.SeriesCollection(j).HasDataLabels = False
For k = 1 To .SeriesCollection(j).Points.Count
With .SeriesCollection(j).Points(k)
If .MarkerSize <> bytSize Then
.MarkerForegroundColorIndex = .MarkerBackgroundColorIndex
.MarkerSize = Sheets("Hilfe").Range("$AR$3").Value
End If
End With
Next
Next
.GetChartElement X, Y, lngElmt, lngSer, lngPnt
If lngElmt = xlSeries Then
If lngPnt > 0 Then
With .SeriesCollection(lngSer)
'get values:
varXVal = Application.Index(.XValues, lngPnt)
dblYVal = Application.Index(.Values, lngPnt)
'mark point:
.Points(lngPnt).MarkerForegroundColor = RGB(0, 0, 0) ' schwarz
.Points(lngPnt).MarkerSize = Sheets("Hilfe").Range("$AR$4").Value
'MEIN VERSUCH:
With .Points(lngPnt).Sheets("Hilfe").Range("$AR$5")
.Value = "X: " & varXVal & vbLf '& "Y: " & dblYVal
End With
End With
' In die Textbox den Text eintragen
If .Shapes("Check Box 21").ControlFormat.Value = 1 Then
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Visible = True
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Select
Selection.Characters.Text = Worksheets("Hilfe").Range("A" & lngPnt + 3)
Else
Charts("Pflanzungs-Karte").Shapes("Text Box 87").Visible = False
End If
End If
End If
.Deselect
End With
Application.ScreenUpdating = True
End Sub

Danke
Grüße aus Berlin
Anzeige
AW: funktioniert, kleine Ergänzung!
24.01.2007 18:41:01
Christoph
Hallo Peter,
mein Code war ja auch nur ein Ansatz... ich hab eben das DataLabel genommen, macht aber keinen wesentlichen Unterschied.
Zunächst wolltest du die Koordinaten in der Textbox haben und jetzt in der Tabelle. Kein Problem, nur noch 'ne Frage vorab:
Was schreibst du den mit "Worksheets("Hilfe").Range("A" & lngPnt + 3)" in die "Textbox87"? Ist das evt. auch der X oder Y-Wert?
Gruß
Christoph
AW: funktioniert, kleine Ergänzung!
25.01.2007 13:12:03
Peter
Hallo Christoph,
1. Das mit dem Ansatz habe ich schon verstanden, leider sind meine VBA-Kenntnisse nicht sehr gut, so dass ich oft Schwierigkeiten habe anhand von Beispielen zu abstrahieren.
2. In der Textbox sollten und werden nicht die Koordinaten angezeigt sondern Punktspezifische Parameter die im Tabellenblatt "Hilfe", Spalte A ab Zeile 4 stehen.
Die Koordinaten der Punkte stehen in Spalte B und C, so dass je nach angeklickten Punkt der dazugehörige Text der Punktspezifischen Parameter aus der Zelle, die in gleicher Zeile wie die Koordinaten stehen, in Textbox 87 ausgelesen wird.
Das funktioniert schon !!
Was ich noch brauche:
3. Ich möchte zusätzlich, dass Koordinaten des angeklickten Punktes in Zellen eines anderen Tabellenblatts ausgeworfen werden, und zwar in Tabellenblatt "Hilfe" Zelle AR5 bzw AR5.
Die X-Koordinate in Sheets("Hilfe").Range("$AR$5").
Die Y-Koordinate in Sheets("Hilfe").Range("$AR$6").
Trotzdem danke, danke!
Grüße aus Berlin
Anzeige
AW: funktioniert, kleine Ergänzung!
25.01.2007 16:30:37
Christoph
OK
ich meld' mich heute abend noch mal.
Christoph M
AW: funktioniert, kleine Ergänzung!
25.01.2007 19:19:24
Christoph
Hallo Peter,
Option Explicit
Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Dim lngElmt As Long, lngSrs As Long, lngPnt As Long
Dim j As Long, k As Long
Dim varX As Variant, dblY As Double
Dim srs As Series, pnt As Point
Dim shTxt As Shape, shChk As Shape
Dim wks As Worksheet
Set wks = Worksheets("Hilfe")
Application.ScreenUpdating = False
With Me
Set shTxt = .Shapes("Text Box 87")
Set shChk = .Shapes("Check Box 21")
'reset chart:
For j = 1 To .SeriesCollection.Count
Set srs = .SeriesCollection(j)
For k = 1 To srs.Points.Count
With srs.Points(k)
If .MarkerSize <> wks.Range("AR3") Then
.MarkerForegroundColorIndex = .MarkerBackgroundColorIndex
.MarkerSize = wks.Range("AR3")
End If
End With
Next
Next
.GetChartElement X, Y, lngElmt, lngSrs, lngPnt
If lngElmt = xlSeries Then
Set srs = .SeriesCollection(lngSrs)
Set pnt = srs.Points(lngPnt)
'get values:
varX = Application.Index(srs.XValues, lngPnt)
dblY = Application.Index(srs.Values, lngPnt)
'modify point:
pnt.MarkerForegroundColor = 1
pnt.MarkerSize = wks.Range("AR4")
'backup values:
wks.Range("AR5") = varX
wks.Range("AR6") = dblY
'update textbox:
shTxt.Visible = shChk.ControlFormat.Value = 1
shTxt.TextFrame.Characters.Text = wks.Range("A" & lngPnt + 3)
End If
.Deselect
End With
Application.ScreenUpdating = True
Set srs = Nothing
Set pnt = Nothing
Set shTxt = Nothing
Set shChk = Nothing
End Sub

Anzeige
alles bestens!!
26.01.2007 17:04:48
Peter
funktioniert alles wunderbar
Danke Christoph

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige