Vba 如何在工作表上获取光标的(X,Y)坐标?
我希望能够创建一个图形,它的左上角位于我的光标位置。可能吗?我的鼠标的(X,Y)可以转换成范围格式吗?Hm,它并不是完全内置在AFAIK中,但我发现这给了我一个对我有用的建议: 在模块中,将其置于顶部: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
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