2015-08-03 16 views

Odpowiedz

4

Not sure about the mouse x y, ale można uzyskać zakres zmiany wyboru arkusza roboczego. Umieść wykres w tej lokalizacji.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Chart.Left = Target.column 
    Chant.Top = Target.row 
End Sub 
+2

Chociaż nie jest to tym, o co prosił mnie OP, myślę, że to byłby dla ciebie lepszy zakład. MyszX/mouseY może działać, ale jeśli możesz to zrobić, zdefiniowałbym położenie wykresu według lokalizacji komórki, zamiast myszyX/mouseY, ponieważ twoja mysz musi być dokładnie tam, gdzie chcesz, po uruchomieniu makra (w kod wysłałem tak czy inaczej). Przyjemne myślenie @matthewD – BruceWayne

+2

Pamiętaj, że korzystanie z funkcji biblioteki systemu Windows sprawia, że ​​twój kod jest bezużyteczny, jeśli musi działać na Excelu dla Mac. Czyste rozwiązanie VBA prawdopodobnie będzie obsługiwane na obu platformach. – Lumigraphics

10

Hm, to nie jest dokładnie zbudowany w AFAIK, ale znalazłem this page co daje sugestię, że pracował dla mnie:

w module, umieścić to na górze:

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long 
Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, _ 
    lpPoint As POINTAPI) As Long 
    Private Type POINTAPI 
    X As Long 
    Y As Long 
End Type 

Następnie dla podprogramy uzyskać mouseX i mouseY, umieścić to gdzieś poniżej:

Function MouseX(Optional ByVal hWnd As Long) As Long 
' Get mouse X coordinates in pixels 
' 
' If a window handle is passed, the result is relative to the client area 
' of that window, otherwise the result is relative to the screen 
    Dim lpPoint As POINTAPI 
    Application.Volatile(false) 
    GetCursorPos lpPoint 
    If hWnd Then ScreenToClient hWnd, lpPoint 
    MouseX = lpPoint.X 
End Function 

i

Function MouseY(Optional ByVal hWnd As Long) As Long 
' Get mouse Y coordinates in pixels 
' 
' If a window handle is passed, the result is relative to the client area 
' of that window, otherwise the result is relative to the screen 

    Dim lpPoint As POINTAPI 
    Application.Volatile(false) 
    GetCursorPos lpPoint 
    If hWnd Then ScreenToClient hWnd, lpPoint 
    MouseY = lpPoint.Y 
End Function 

Następnie, w Excelu, jeśli po prostu wprowadzisz komórkę =mouseX(), zwróci ona pozycję mouseX po trafieniu ENTER. To samo z =mouseY().

próbuje ją, zrobiłam:

Sub chart_Test() 

    ActiveSheet.Shapes.AddChart.Select 
    ActiveChart.ChartType = xlLine 
    ActiveSheet.Shapes("Chart 1").Top = MouseY() 
    ActiveSheet.Shapes("Chart 1").Left = MouseX() 

End Sub 

i dostał go do pracy.

edytuj: Uwaga, nie jestem tak dobry z wykresami jak inne rzeczy w VBA, więc podczas tworzenia wykresów musisz edytować część .Shapes("Chart 1"). z dowolną nazwą/numerem wykresu, na którym się znajdujesz. Lub iteruj przez nie.