我希望在单击单元格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
时,此代码才有效。当前在这种情况下不会出现该消息框。
有没有办法解决这个问题?
答案 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}},也可能有一种绕行方式。
这两种方法均未经过测试,您可能需要进行一些精美的编码才能使其起作用。根据多久将单击已选择的同一单元格(以及对该功能的单击方式),您可能只想重新考虑工作表的布局。
例如,您可以添加额外的列,并让用户单击旁边的单元格,其中该单元格具有激活消息框的值。
Worksheet.BeforeDoubleClick
Event (Excel) Worksheet.BeforeRightClick
Event (Excel)