单击单元格时显示MsgBox-即使已选择单元格

时间:2018-08-24 12:31:40

标签: excel vba excel-vba events onclick

我希望在单击单元格MsgBox时显示A1。我希望即使单击A1时它也会出现:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Application.EnableEvents = False

  If Target.Row = 1 And Target.Column = 1 Then
    MsgBox ("message")
  End If

  Application.EnableEvents = True
End Sub

只有当我单击单元格A1时,此代码才有效。当前在这种情况下不会出现该消息框。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:4)

您的代码使用的是Worksheet_SelectionChange,只有在选择了其他单元格后,它才会触发(因此,名称为Selection Change)。

或者,如果可以通过双击右键单击达到[未知]目标,那么还有其他工作表事件会有所帮助:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox Target.Address & " was double clicked"
    Cancel = True 'don't edit cell
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox Target.Address & " was right clicked"
    Cancel = True 'don't open context menu
End Sub

请注意,这些事件过程的代码必须为placed in the worksheet module


编辑:更多创造性的方式

通过PeekMessage API的点击事件

  • 如果必须单击一次,则可以通过“偷偷摸摸”的方式来完成此操作,例如添加 Click事件。这不是Excel VBA的内置功能,因此通常不建议使用此方法。

    它涉及在鼠标单击单元格时检查WM_MOUSEMOVE消息,这是通过在PeekMessage API内调用Worksheet_SelectionChange event来完成的。更多信息和示例here

透明命令按钮

  • 使用ActiveX Command Button(不带标题)并将BackStyle属性设置为frmBackStyleTransparent的{​​{3}},也可能有一种绕行方式。

这两种方法均未经过测试,您可能需要进行一些精美的编码才能使其起作用。根据多久将单击已选择的同一单元格(以及对该功能的单击方式),您可能只想重新考虑工作表的布局。

例如,您可以添加额外的列,并让用户单击旁边的单元格,其中该单元格具有激活消息框的值。


更多信息: