2015-08-03 3 views

Antwort

4

Nicht sicher über die Maus x y, aber Sie könnten den Bereich bei der Arbeitsblattauswahl ändern. Setzen Sie das Diagramm an diesem Ort.

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

Obwohl es nicht das ist, was OP verlangt, denke ich, dass dies Ihre bessere Wette wäre. Die mouseX/mouseY funktioniert möglicherweise, aber wenn Sie es tun können, würde ich die Position des Diagramms anhand der Position einer Zelle definieren, anstatt mit mouseX/mouseY, da Ihre Maus genau dort sein muss, wo Sie sie haben möchten Code, den ich sowieso gepostet habe). Nettes Denken @matthewD – BruceWayne

+2

Denken Sie daran, dass die Verwendung von Windows-Bibliotheksfunktionen Ihren Code nutzlos macht, wenn er auf Excel für Mac ausgeführt werden muss. Eine reine VBA-Lösung wird wahrscheinlich auf beiden Plattformen unterstützt. – Lumigraphics

10

Hm, es ist nicht genau in AFAIK gebaut, aber ich fand this page, die einen Vorschlag gibt, die für mich gearbeitet:

In einem Modul, setzen diese an der Spitze:

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 

Dann wird für die Subroutinen der mouseX und mouseY, setzen Sie diese irgendwo unten zu bekommen:

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 

und

Dann, in Excel, wenn Sie einfach in eine Zelle eingeben =mouseX() es gibt die mouseX-Position zurück, wenn Sie ENTER treffen. Gleiches mit =mouseY().

es aus Probieren, ich tat:

Sub chart_Test() 

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

End Sub 

und bekam es zu arbeiten.

edit: Hinweis, ich bin nicht so gut mit Diagrammen als andere Dinge in VBA, so dass Sie den .Shapes("Chart 1"). Teil zu dem Diagramm Namen/Nummer, die Sie arbeiten, bearbeiten müssen, wie Sie Diagramme erstellen. Oder iteriere sie durch.

Verwandte Themen