Excel-Diagramm: Koordinaten eines Mausklicks?

Hallo Experten,
ich mache einen zweiten Versuch: Ich habe ein Excel-Diagrammblatt mit einem X-Y-Diagramm. Die X-Achsenbereich geht von 0-20. Nun möchte ich per VBA die X-Koordinate ermitteln, auf die der Benutzer klickt. Mit dem MouseDown-Ereignis kann ich die X-Koordinate des Klicks (laut Excel-Hilfe) in „Diagramm-Client-Koordinaten“ ermitteln. Wie immer die definerte sein mögen, keine Ahnung. Die „InsideLeft“-Eigenschaften der PlotArea gibt mir den Abstand vom linken Diagrammrand (wie immer der definiert sein mag) in Points, und die „InsideWidth“-Eigenschaften der PlotArea gibt mir die Breite des Diagramms in Points an.
Gibts eine Möglichkeit, um aus diesen Angaben die X-Koordinate zu ermitteln, auf die ein Benutzer klickt. Und das möglichst auch für jeden Zoomfaktor, den der Benutzer eingestellt hat.
Kurzer Beispielcode:
Sub Koordinaten()
With Charts(1)
.SizeWithWindow = True
MsgBox „InsideLeft=“ & .PlotArea.InsideLeft
MsgBox „InsideWidth=“ & .PlotArea.InsideWidth
End With
End Sub
Private Sub Chart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
MsgBox „X=“ & X
End Sub
Lasse ich das Sub „Koordinaten“ laufen, erhalte ich:
InsideLeft=29
InsideWidth=912
Klicke ich irgendwo ins Diagramm, erhalte ich z.B.
X=651
Wie kann ich jetzt aus dieser 651 berechnen, wo ich hingeklickt habe? (in diesem Fall habe ich genau in die Mitte, auf 10 geklickt).
Für jede Antwort dankbar.
Gruß Andreas

WinXP SP2, Excel97

Hallo Experten,
ich mache einen zweiten Versuch: Ich habe ein
Excel-Diagrammblatt mit einem X-Y-Diagramm. Die
X-Achsenbereich geht von 0-20. Nun möchte ich per VBA die
X-Koordinate ermitteln, auf die der Benutzer klickt.
gelöscht :
Wie kann ich jetzt aus dieser 651 berechnen, wo ich
hingeklickt habe? (in diesem Fall habe ich genau in die Mitte,
auf 10 geklickt).
Für jede Antwort dankbar.
Gruß Andreas

Hallo Andreas,

ich habe gerade kein Excel auf dem Rechner, aber was sagt denn Deine Routine wenn Du auf 0 bzw. 20 drückst? Und wenn Du gerade dabei, natürlich auch in den unterscheidlichen Zoom-Stufen. Übrigens ein Physiker würde mehrmals messen, da man nie genau den eigentlichen Punkt trifft (in diesem Fall die 10).

MfG Georg V.

Hallo Georg,
da ich Physiker bin, habe ich natürlich mehrmals gemessen: Für die Position 10 kam immer 651 raus. Für Position 0 kommt 51 raus, für Position 20 1251. Dies gilt für SizeWithWindow=true, also Zoom unbekannt.
Für Zoom 100%: Pos. 0: 189, Pos 10: 640, Pos. 20: 1091
Für Zoom 50%: Pos. 0: 409, Pos 10: 635:, Pos. 20: 861
Für Zoom 130% (ganzer Bildschirm): Pos. 0: 59, Pos. 10: 645, Pos. 20: 1230.
Hilft dir das weiter?
Gruß, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas,

ich bin zwar kein Experte / Profi unter VBA. Mir liegt mehr das VB.
Unter VB würde ich es wiefolgt ermitteln.

Breite des Diagrammes = x
Bereich der X Achse = z
Position = Wert
Aktueller Wert im Diagram wo geklickt wurde = a
Wert = a /(x/z)

Mit dieser Variante spielt der Zoom keine Rolle.
Ich hoffe ich habe deine Problematik verstanden und die kleine Formel hilft dir ein wenig weiter :smile:

MfG Alex

Hallo Andreas,

ich habe gerade kein Excel auf dem Rechner, aber was sagt denn
Deine Routine wenn Du auf 0 bzw. 20 drückst? Und wenn Du
gerade dabei, natürlich auch in den unterscheidlichen
Zoom-Stufen. Übrigens ein Physiker würde mehrmals messen, da
man nie genau den eigentlichen Punkt trifft (in diesem Fall
die 10).

MfG Georg V.

Hallo Georg,
da ich Physiker bin, habe ich natürlich mehrmals gemessen: Für
die Position 10 kam immer 651 raus. Für Position 0 kommt 51
raus, für Position 20 1251. Dies gilt für SizeWithWindow=true,
also Zoom unbekannt.
Für Zoom 100%: Pos. 0: 189, Pos 10: 640, Pos. 20: 1091
Für Zoom 50%: Pos. 0: 409, Pos 10: 635:, Pos. 20: 861
Für Zoom 130% (ganzer Bildschirm): Pos. 0: 59, Pos. 10: 645,
Pos. 20: 1230.
Hilft dir das weiter?
Gruß, Andreas

Hallo Andreas,

willkommen in Club, auch wenn ich wie wahrscheinlich ein Großteil aller Physiker nicht mehr in der Physik arbeite. Ja die Antwort hilft mir weiter, denn Deine Grundanforderungen (Linearität der Positionsangaben) sind damit erstmal erfüllt. Ich werde mal gleich den Rechner mit Excel hochfahren und das Problem mal tiefer analysieren.

MfG Georg V.

Hallo Alex,

danke für den Versuch. Aber leider ist es mit diesem einfachen „Dreisatz“ nicht getan: Ich kenne die Länge der X-Achse nur in Points, aber nicht in diesen Client-Koordinaten. Dazu müsste ich, sozusagen zum Kalibrieren, den Benutzer bitten, beim Programmstart bzw. bei jeder Zoomänderung auf den Null- und den 20er-Punkt zu klicken. Das ist denn doch ein bisschen umständlich.
Gruß, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas,

Shit sowas in der Art dachte ich mir bereits :confused:
Unter VB waere dies alles kein Thema. Was hast du denn alles für Eigenschaften? Zufaellig Scalewith ? Oder kannst du nicht zwischen der 2 Angaben ausrechnen 1 Point = x ?

Kannst du es nicht zur Not nicht so machen.

Programmstart oder Änderung des Zooms, automatisch den Wert von X manuell auf 20 setzen (Bei VB ist das dann meist die Value Eigenschaft) Dann die Koordinaten ausrechnen. Danach wieder auf den Ursprung setzen. Somit kannst du dann die gewünschten Daten mit dem Dreisatz ermitteln.

MfG Alex

Hallo Andreas,

nur eine kleine Rückfrage: Benötigst Du die exakte Koordinate oder klickst Du eine Kurve rein, deren Wert zu dann aus den zugrunde liegenden Daten herauslesen kannst (hierzu hätte ich schon eine nette Lösung gefunden :smile: )

MfG Georg V.

Hallo Andreas,

willkommen in Club, auch wenn ich wie wahrscheinlich ein
Großteil aller Physiker nicht mehr in der Physik arbeite. Ja
die Antwort hilft mir weiter, denn Deine Grundanforderungen
(Linearität der Positionsangaben) sind damit erstmal erfüllt.
Ich werde mal gleich den Rechner mit Excel hochfahren und das
Problem mal tiefer analysieren.

MfG Georg V.

Hallo Andreas,

nur eine kleine Rückfrage: Benötigst Du die exakte Koordinate
oder klickst Du eine Kurve rein, deren Wert zu dann aus den
zugrunde liegenden Daten herauslesen kannst (hierzu hätte ich
schon eine nette Lösung gefunden :smile: )

MfG Georg V.

Hallo Georg,
in dem Diagramm befindet sich eine Kurve, die durch eine Messroutine entstanden ist. Das ist aber zunächst unerheblich. Der Benutzer soll durch Klicken auf bestimmte X-Werte die Möglichkeit haben, das Diagramm in X-Achsen-Abschnitte einzuteilen. Bei jedem Klick möchte ich einen senkrechten Strich ins Diagramm setzen. Die Auswertung der Kurve erfolgt dann später in diesen Abschnitten, d.h. die Auswertroutine muss wissen, von wo bis wo (in Benutzer-Einheiten) die einzelnen Abschnitte gehen.
Gruß, Andreas

Hallo Andreas,

willkommen in Club, auch wenn ich wie wahrscheinlich ein
Großteil aller Physiker nicht mehr in der Physik arbeite. Ja
die Antwort hilft mir weiter, denn Deine Grundanforderungen
(Linearität der Positionsangaben) sind damit erstmal erfüllt.
Ich werde mal gleich den Rechner mit Excel hochfahren und das
Problem mal tiefer analysieren.

MfG Georg V.

Hallo Alex,

das Problem ist ja nicht das Umrechnen von Points in Benutzer-Einheiten. Das wäre ja wirklich nur ein einfacher Dreisatz.
Das Problem ist: Ich weiß nicht bei welchen Client-Einheiten (der Mausklick liefert leider nur diese) die X-Achse beginnt und endet.
Gruß, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas,

Hmmm so kommen wir nicht weiter. Ich habe bei mir Excel 97 drauf.
Wenn du Lust hast, so sende mir mal dein File. Dann kann ich mal schauen ob ich da ne Lösung finde. So schwer kann das ja nicht sein!
Solltest du Interesse daran haben, so sende mir das File bitte auf …

MfG Alex

[MOD] Mailadresse entfernt.

Hi Alex,

sag bitte bescheid, wenn das erledigt ist, die Mailadresse möchte ich wegen Google entfernen, bevor der Beitrag archiviert wird.

Gruß, Rainer

Hallo Alex,
danke für das Angebot. Ich schicke dir die Datei heute abend.

Hallo Rainer,
ich habe mir die Adresse aufgeschrieben. Kann gelöscht werden.

Gruß, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ich mache einen zweiten Versuch: Ich habe ein
Excel-Diagrammblatt mit einem X-Y-Diagramm. Die
X-Achsenbereich geht von 0-20. Nun möchte ich per VBA die
X-Koordinate ermitteln, auf die der Benutzer klickt. Mit dem
MouseDown-Ereignis kann ich die X-Koordinate des Klicks (laut
Excel-Hilfe) in „Diagramm-Client-Koordinaten“ ermitteln. Wie
immer die definerte sein mögen, keine Ahnung. Die

Hi Andreas,
wie wärs denn damit, noch paar neue Zahlen *glaub* :smile:
(Ist echt nicht einfach da mit Points, und Pixel und Bildschirmauflösung und Zoom usw. zurechtzukommen.)

Wenn das nicht weiterhilft, ich hätte noch Code, der gibt die lfd. Nummer des rechts davon gelegenen Datenpunktes an, daraus kommt man dann auf den X-Wert dieses Datenpunktes.
Allerdings muß man da genau die Kurve anklicken, einfach ins Feld bringt 0 als Ergebnis :frowning:
Bei Interesse melde dich.

In das Klassenmodul des Diagrammblattes:

Option Explicit

Private Sub Chart\_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
 Dim pp As POINTAPI
 Call GetCursorPos(pp)
 MsgBox pp.x & ":" & pp.y
End Sub

In Modul1:

Option Explicit

Public Type POINTAPI
 x As Long
 y As Long
End Type

Public Declare Function GetCursorPos Lib „user32“ _
(lpPoint As POINTAPI) As Long

Gruß
Reinhard