我想知道单元格的选择是由光标移动还是鼠标操作引起的。
有很多文章解释了如何在Excel中诱捕鼠标点击,甚至有一些解释了左键点击可以被诱捕。
在Web上可以多次找到此代码:
' The declaration tells VBA where to find and how to call the API
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
' The function returns whether a key (or mouse button) is pressed or not
Public Function KeyPressed(ByVal Key As Long) As Boolean
KeyPressed = CBool((GetAsyncKeyState(Key) And &H8000) = &H8000)
End Function
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (KeyPressed(&H1) = True) Then
MsgBox "Left click"
End If
If (KeyPressed(&H2) = True) Then
MsgBox "Right click"
End If
End Sub
这段代码捕获了右键单击事件,但没有捕获左键!可能是因为它被放置在Worksheet_SelectionChange事件中,而该事件只有在SelectionChanged发生时才被调用,因此当左键已经被释放时才被调用!
如何检测工作表单元格上的左键单击,以了解单元格的选择是由键盘输入(箭头或回车)还是由鼠标左/右键单击操作引起的?
2条答案
按热度按时间okxuctiv1#
我发现了这篇伟大的文章,并适应它的鼠标按钮检查:https://www.mrexcel.com/board/threads/keypress-event-for-worksheet-cells.181654/
添加此模块:
它定义了您在"ThisWoorkbook"中使用的2个过程StartHook和StopHook:
和2个函数,您可以在宏中使用的工作表如下:
注意事项:
qcbq4gxm2#
代码答案的附录:
从VBA 7及更高版本开始,开头的“Declare”语句还需要包括“PtrSafe”。Microsoft添加此检查以确保“Declare”语句在64位版本的Office中安全运行。请参阅此处的文章:
https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/64-bit-visual-basic-for-applications-overview