Excel VBA:如何从代码触发事件?
我有一个Worksheet_BeforeDoubleClick事件,在目标单元格中打开一个列表框。 我被要求通过一个button来提供相同的function,而不是(或者除了)双击。
在我input的button的Click事件中:
Call Worksheet_BeforeDoubleClick(Selection,true)
…所以button只是“双击”单元格。 它似乎运作良好,但在我开始在我的项目中使用这种技术之前,我想知道是否有我应该知道的陷阱。
从另一个事件或标准的代码模块调用一个事件的最佳实践是什么?
我想知道是否有我应该知道的陷阱。
是的,有一个主要的陷阱。 Selection
一定不一定是一个范围。 看到这个例子
-
插入一个button
-
插入一个空白图表
-
在图表中插入图像。 让图像突出显示
假设我们有这个代码
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程序。