Excel VBA:如何从代码触发事件?

我有一个Worksheet_BeforeDoubleClick事件,在目标单元格中​​打开一个列表框。 我被要求通过一个button来提供相同的function,而不是(或者除了)双击。

在我input的button的Click事件中:

Call Worksheet_BeforeDoubleClick(Selection,true) 

…所以button只是“双击”单元格。 它似乎运作良好,但在我开始在我的项目中使用这种技术之前,我想知道是否有我应该知道的陷阱。

从另一个事件或标准的代码模块调用一个事件的最佳实践是什么?

我想知道是否有我应该知道的陷阱。

是的,有一个主要的陷阱。 Selection一定不一定是一个范围。 看到这个例子

  1. 插入一个button

  2. 插入一个空白图表

  3. 在图表中插入图像。 让图像突出显示

在这里输入图像说明

假设我们有这个代码

 Private Sub CommandButton1_Click() Call Worksheet_BeforeDoubleClick(Selection, True) End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox Target.Address End Sub 

现在按下button,你会得到一个错误。

在这里输入图像描述

工作表事件也会在需要时触发。当select不合适时,他们不会。

话虽如此,你可以让你的命令button代码这样工作

 Private Sub CommandButton1_Click() '~~> Check if what the user selected is a valid range If TypeName(Selection) = "Range" Then Call Worksheet_BeforeDoubleClick(Selection, True) Else MsgBox "Not a Valid Range" End If End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox Target.Address End Sub 

但是,那么所有的和你将放置什么所有的CHECKS :)最好的方法是把它放在一个Sub @Sambuild议,然后从Button/Worksheet_BeforeDoubleClick调用它。

如果你仍然想从一个button调用它,那么确保所有相关的检查都包括一个合适的error handling程序。