VBA - Excel 2007 Diagram Adatpont érték lekérdezés

VBA - Excel 2007 Diagram Adatpont érték lekérdezés
2016-11-22T09:57:56+01:00
2016-11-22T12:43:01+01:00
2022-12-04T04:35:39+01:00
arvaferko
Sziasztok!

Egy olyan kérdésem van:
Van egy Excel xy-scatter diagramom (kb. 500) adatponttal.
Hogy készíthetnék egy olyan VBA kódot, ami egy jobb-egérgomb klikkeléssel lekérdezi a ráklikkelt adatpont x és y koordinátáját (mondjuk egy msgbox-ba)?
Excel 2007.

Köszi!
Mutasd a teljes hozzászólást!

  • Megoldható, mert (szinte) bármi megoldható de azért nem olyan egyszerű, hogy biztosan megérje Nekem Excel 2010 van, de úgy rémlik, már régi dolog, hogy ha egy adatpont fölé viszed az egeret, kiírja az adatait.

    Ha mégis feltett szándékod, hogy megvalósítod, akkor: Minden diagramhoz van Chart.MouseDown, Chart.MouseMove és Chart.MouseUp. Ezeket kell okosan felhasználni (de persze hagyni kell, hogy a szelekciós és módosítási lehetőségek ne csorbuljanak!
    Aztán vizsgálni kell a Chart.SeriesCollection elemeit, ott találsz majd XYValues értékeket, ebben vannak az adatértékek. Valamint Chart.Points elemeket, ez utóbbinak .Left és .Top értékei vannak, ez pedig a fizikai pozíció. Persze pontértékben és a diagramterület szélétől, tehát ezt át kell majd váltani pixelbe. Esetleg lehet/kell vizsgálni a Selection értékét, ez szerencsés esetben egy Point lesz, és akkor annak az értékét kell megjeleníteni. Szép feladat, megnézem!
    Mutasd a teljes hozzászólást!
  • Az lenne a feladat, hogy az értéket egy változóba vagy akár egy cellába exportálja, nem jó, ha egy bubiba nekem megmutatja :) Egyébként csak akkor írja ki, ha a Diagram és azon belül is a SeriesCollection van kiválasztva. (Persze ez lényegtelen is, úgyis a ráklikkelésnél is az lesz)

    Hát dolgozom rajta, de nem egyszerű.
    Mutasd a teljes hozzászólást!
  • Lehet, hogy nem is olyan nehéz? Kitaláltam egy ilyet:

    Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim ix As Integer, Ser As Series, Pt As Point, p As Integer If TypeOf Selection Is Point Then Set Pt = Selection Set Ser = Pt.Parent p = InStr(Pt.Name, "P") If p <= 0 Then Exit Sub ix = Mid(Pt.Name, p + 1) If ix <= 0 Then Exit Sub MsgBox Ser.XValues(ix) & "; " & Ser.Values(ix) End If End Sub
    Minden pont neve S1P5 típusú (első sorozat ötödik pont). Ezt használni nem túl elegáns, de másképp nem tudtam megtalálni a sorozaton belüli helyét.
    Mutasd a teljes hozzászólást!
  • Igen, ez eddig szuper is :), Ez még nekem is megvan.

    Csak nekem igazából azzal van a gondom, hogy ezt a diagramot nem külön munkalapként kezelem, hanem egy Worksheet-n Chart-ként :) Ebben az esetben nincsenek ChartEvent-ek....
    És ez a legnagyobb bajom! Ugyanis vannak ActiveX vezérlők a diagramhoz, ezt pedig csak ott (Sheet-n) tudom elhelyezni.
    Mutasd a teljes hozzászólást!
  • Hmm, ez már a harmadik kérdés itt, nem lett volna egyszerűbb rögtön azt megkérdezni, hogy beágyazott diagramon hogyan kell aktiválni az eseményeket?

    Először kell egy Class Module, mondjuk Class1 a neve, ez van benne:

    Public WithEvents ClickedChart As Chart Private Sub ClickedChart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim ix As Integer, Ser As Series, Pt As Point, p As Integer If TypeOf Selection Is Point Then Set Pt = Selection Set Ser = Pt.Parent p = InStr(Pt.Name, "P") If p <= 0 Then Exit Sub ix = Mid(Pt.Name, p + 1) If ix <= 0 Then Exit Sub MsgBox Ser.XValues(ix) & "; " & Ser.Values(ix) End If End Sub
    Aztán egy normál modulban inicializálni kell:

    Dim MyClass As New Class1 Sub initclass() Set MyClass.ClickedChart = _ Munka2.ChartObjects(1).Chart End Sub
    És működik a klikkelés.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd