我想使用宏,在excel工作区中,鼠标悬停的位置使用快捷键画直线,因此需要获取鼠标在工作区中的坐标。百度到的方法直接获取鼠标位置获取到的是以整个屏幕为坐标系的坐标(原点在屏幕左上角)。同时还要考虑工作区缩放的问题。
请问下解决方式?
vba如何获取鼠标在工作区的坐标
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
科技梦想家 2024-09-23 22:54关注
在 Excel VBA 中,获取鼠标在工作区的坐标并不直接支持。不过,您可以通过一些间接的方法来实现。下面是一个步骤,可以帮助您获取鼠标在 Excel 工作区中的位置,并画出直线。以下内容由AIGC 及 gpt.4o 科技梦想家编程博士 共同为您回答解决方案、有用望采纳☀️☀️:
方法步骤
获取鼠标位置:
使用 Windows API 函数获取鼠标的位置。这个位置是基于整个屏幕的坐标。转换坐标:
将屏幕坐标转换为 Excel 工作表的坐标。需要考虑 Excel 窗口的位置以及工作区的缩放。画线:
使用获取的坐标在工作表上画出直线。示例代码
以下是一个 VBA 代码示例,说明如何实现上述步骤:#If VBA7 Then Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long #Else Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long #End If Private Type POINTAPI x As Long y As Long End Type Sub DrawLineAtMouse() Dim pt As POINTAPI Dim mouseX As Long, mouseY As Long Dim ws As Worksheet Dim zoomFactor As Double ' 获取鼠标坐标 GetCursorPos pt mouseX = pt.x mouseY = pt.y ' 获取当前活动工作表 Set ws = ActiveSheet ' 计算 Excel 窗口的位置 Dim excelX As Long, excelY As Long excelX = Application.Left excelY = Application.Top ' 计算工作区坐标 Dim localX As Double, localY As Double localX = (mouseX - excelX) / ws.Parent.Windows(1).Zoom localY = (mouseY - excelY) / ws.Parent.Windows(1).Zoom ' 在工作表上画线(从当前单元格位置开始) With ws.Shapes.AddLine(BeginX:=localX, BeginY:=localY, EndX:=localX + 50, EndY:=localY + 50) .Line.ForeColor.RGB = RGB(255, 0, 0) ' 设置线条颜色为红色 End With End Sub使用说明
粘贴代码:
在 Excel 的 VBA 编辑器中插入一个模块,然后粘贴上面的代码。运行宏:
运行 DrawLineAtMouse 宏,鼠标悬停的位置将被获取,并在工作表上画出一条直线。注意事项
这个代码假设 Excel 窗口处于活动状态。
您可能需要根据实际需要调整线条的起始和结束位置。
确保启用了宏,才能执行此代码。
通过这种方式,您就可以在 Excel 工作区中根据鼠标位置绘制直线了!如果有进一步的问题,请随时问我。解决 无用评论 打赏 举报