【问题标题】:How to run code when clicking a cell?单击单元格时如何运行代码?
【发布时间】:2015-08-11 22:41:43
【问题描述】:

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

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

如何让它只在实际点击单元格时才运行代码?

【问题讨论】:

  • 有右键和双击但没有左键(那将是一场噩梦 XD)
  • 所以没有办法将单元格用作按钮?
  • 我之前使用过activeX按钮,但它们总是搞砸了,所以我正在寻找其他选项
  • 如果我们知道您想要做什么,我们可能会建议其他解决方案。或者提出问题来修复您当前的按钮?
  • 看看我的回答here

标签: vba excel


【解决方案1】:

您也可以检测左键单击。我回答了类似的问题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 中的其他位置(例如选择另一个功能区),然后更改每个箭头键的单元格选择。不幸的是,还没有找到解决方案。

【讨论】:

  • 试过这个但不能让它工作。没有错误,但也没有发生任何事情
  • 您必须确保一切都在正确的位置。 worksheet_selectionchange 必须在您正在尝试的工作表的模块中,而不是“此工作簿”中。并且声明命令必须放在一个普通的模块中(如果你插入一个模块1)。
  • 双重检查和三重检查。一切都在正确的地方
  • 如果您跳过键检查,选择更改是否正常工作?
  • @JentevanHeuverswyn 我假设你用实际代码交换了do something here?只是问
【解决方案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

在网络上进行大量搜索后,对此没有任何结论。这可能不是您正在寻找的答案,但我认为您不会找到您想要的。

【讨论】:

  • 至于缺少“官方”文档……msdn 对在 VBA 中实现的内容有好处,但没有说明不能做什么。
  • 好的。谢谢你的努力。我猜 selectionChange 将不得不这样做。
  • @JentevanHeuverswyn 这不是真的。查看我对类似问题的回答:here
  • @EngJon 不错!这是一个启示。我在尝试时遇到编译错误,但如果你能让它为他工作,我会在他看到你的评论后立即删除。如果你发布你的答案,我会删除我的。
  • 看起来你最初的解决方案最终没有从它下面的 cmets 中解决。他最终能够使其按预期工作吗?我也需要知道这一点以供个人使用:D
猜你喜欢
  • 2014-10-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2021-12-12
  • 2016-09-30
  • 1970-01-01
相关资源
最近更新 更多