Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 单击单元格时显示MsgBox-即使已选择单元格_Vba_Excel_Events_Onclick - Fatal编程技术网

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

Vba 单击单元格时显示MsgBox-即使已选择单元格,vba,excel,events,onclick,Vba,Excel,Events,Onclick,我希望在单击单元格A1时显示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.EnableEven

我希望在单击单元格A1时显示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时未选中该单元格时有效。在这种情况下,当前消息框不显示

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

您的代码使用的是工作表\u SelectionChange,它只在选择了不同的单元格后才会触发,因此名称选择会发生变化

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

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

请注意,这些事件过程的代码需要修改

编辑:更具创造性的方式 通过Peek消息API单击事件

如果必须单击一次,则有更隐蔽的方法来完成此操作,例如添加单击事件。这不是Excel VBA的内置功能,因此,通常不建议使用此方法

它涉及在单击单元格时检查WM_MOUSEMOVE消息,这是通过调用。更多信息和例子

透明命令按钮

也可能有一种迂回的方法来实现这一点,使用不带标题的,BackStyle属性设置为frmBackStyleTransparent

这两种方法都没有经过测试,您可能需要进行一些奇特的编码才能让它们正常工作。根据已选定的同一单元格被单击的频率以及该功能对您的影响,您可能只需重新考虑工作表的布局

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

更多信息: MSDN: MSDN: 奇普·皮尔森: 您的代码使用的是工作表\u SelectionChange,它仅在选择了不同的单元格时触发,因此名称选择发生了更改

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

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

请注意,这些事件过程的代码需要修改

编辑:更具创造性的方式 通过Peek消息API单击事件

如果必须单击一次,则有更隐蔽的方法来完成此操作,例如添加单击事件。这不是Excel VBA的内置功能,因此,通常不建议使用此方法

它涉及在单击单元格时检查WM_MOUSEMOVE消息,这是通过调用。更多信息和例子

透明命令按钮

也可能有一种迂回的方法来实现这一点,使用不带标题的,BackStyle属性设置为frmBackStyleTransparent

这两种方法都没有经过测试,您可能需要进行一些奇特的编码才能让它们正常工作。根据已选定的同一单元格被单击的频率以及该功能对您的影响,您可能只需重新考虑工作表的布局

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

更多信息: MSDN: MSDN: 奇普·皮尔森:
是否双击而不是单击“为您工作”?我希望它显示,即使该单元格已处于活动状态并且正在被单击,但这将不起作用,因为该事件称为SelectionChange,这意味着选择必须更改才能触发该事件。@ashleedawg总比没有好,即使单击是首选的,为什么不使用按钮?@Ans-注意,在您的代码示例中,使用Application.EnableEvents启用和禁用事件的两行代码不会产生任何效果,并且是不必要的。仅当事件中的代码将/可能触发另一个事件时才需要此选项。是否双击而不是单击“为您工作”?我希望即使该单元格已处于活动状态且正在被单击,也会显示此选项。此选项将不工作,因为该事件称为SelectionChange,这意味着必须更改选择才能触发该事件。@Ashledawg这总比什么都不做要好,即使单击一次更好为什么不直接使用按钮?@Ans-注意,在您的代码示例中,两行使用Application.EnableEvents启用和禁用事件不会产生任何效果,并且是不必要的。只有当事件中的代码将/可能触发另一个事件时,才需要这样做。