单击单元格时如何运行代码?

时间:2015-08-11 13:41:31

标签: vba excel-vba excel

我知道我可以使用Worksheet_SelectionChange,但这并不能完全符合我的要求。

例如,当我使用箭头键移动活动单元格时,它仍将运行代码。

如何在实际点击单元格时仅运行代码?

2 个答案:

答案 0 :(得分:2)

对于Excel应用程序,无法使用VBA捕获鼠标左键。如果按下鼠标左键,有一些方法可以全局检查,但从我收集的内容看起来并不简单可靠。见:

http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_28343702.html尚未解决(基本上与您有相同的问题)

SelectionChange不仅适用于鼠标:http://excel.tips.net/T003070_Mouse_Click_Event_in_VBA.html

经过大量搜索后,网上没有任何内容对此很有说服力。这可能不是您正在寻找的答案,但我不认为您会找到您想要的。

答案 1 :(得分:2)

您也可以检测左键点击。我回答了类似的问题here

在特定工作表模块中插入以下代码(例如“Sheet1”):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If (GetAsyncKeyState(vbKeyLButton)) Then 'left mouse button
            'do something here
    End If
End Sub

此外,您必须在正常模块的顶部插入以下部件(如标准“Module1”):

Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

就是这样。 “在这里做点什么”这个部分可以满足你的需求。

然而,这有一些缺陷:如果你做了点击完成的事情(例如一个MsgBox),用箭头键进行的下一个选择更改也将触发事件并重新执行你的东西。要绕过此功能,您可以添加额外的“空”

If (GetAsyncKeyState(vbKeyLButton)) Then 'left mouse button 'blank End If

在selectionChange Sub的末尾。正如我所说,存在缺陷 s ,因此这不会禁用Excel的所有不需要的行为。另一个是点击Excel中的其他位置(例如,选择另一个功能区),然后更改每个箭头键的单元格选择。遗憾的是,没有找到解决方案。