Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在工作表上获取光标的(X,Y)坐标?_Vba_Excel - Fatal编程技术网

Vba 如何在工作表上获取光标的(X,Y)坐标?

Vba 如何在工作表上获取光标的(X,Y)坐标?,vba,excel,Vba,Excel,我希望能够创建一个图形,它的左上角位于我的光标位置。可能吗?我的鼠标的(X,Y)可以转换成范围格式吗?Hm,它并不是完全内置在AFAIK中,但我发现这给了我一个对我有用的建议: 在模块中,将其置于顶部: Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As

我希望能够创建一个图形,它的左上角位于我的光标位置。可能吗?我的鼠标的(X,Y)可以转换成范围格式吗?

Hm,它并不是完全内置在AFAIK中,但我发现这给了我一个对我有用的建议:

在模块中,将其置于顶部:

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
然后,为了让子程序获得mouseX和mouseY,请将其放在下面的某个位置:

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

然后,在Excel中,如果您只需在单元格中输入
=mouseX()
,当您点击
enter
时,它将返回mouseX位置。与
=mouseY()
相同

我尝试了一下,我做到了:

Sub chart_Test()

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

End Sub
并让它发挥作用


编辑:注意,我在VBA中对图表的处理不如其他东西好,因此在创建图表时,您需要将
.Shapes(“图表1”)。
部分编辑为您所在的任何图表名称/编号。或者反复浏览它们。

不确定鼠标x y,但您可以在工作表选择更改时获得范围。把图表放在那个位置

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

虽然这不是OP要求的,但我认为这是你最好的选择。mouseX/mouseY可以工作,但是如果你能做到的话,我会用单元格的位置来定义图表的位置,而不是mouseX/mouseY,因为当你运行宏时,你的鼠标必须正好在你想要的地方(在我发布的代码中)。@matthewDRemember的想法很好,如果需要在Excel for Mac上运行,那么使用Windows库函数会使代码毫无用处。两种平台都可能支持纯VBA解决方案。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Chart.Left = Target.column
    Chant.Top  = Target.row
End Sub