我有一个Worksheet_BeforeDoubleClick事件,在目标单元格中打开一个列表框.我被要求通过按钮提供相同的功能,而不是(或除了)双击.
在我输入的按钮的Click事件中:
Call Worksheet_BeforeDoubleClick(Selection,true)
...所以按钮只需"双击"单元格.它似乎运作良好,但在我开始在整个项目中使用这种技术之前,我想知道是否存在我应该注意的陷阱.
从另一个事件或标准代码模块调用事件时,最佳做法是什么?
我想知道是否存在我应该注意的陷阱.
是的,有一个主要的陷阱.该Selection
必然可能不是一个范围.看这个例子
插入一个按钮
插入空白图表
在图表中插入图像.让图像突出显示
假设我们有这个代码
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
现在按下按钮,您将收到错误消息.
工作表事件在需要时也会触发......当选择不合适时,它们不会触发.
说了这么多,你CAN让你的命令按钮的代码工作像这样
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中,如同@Sam建议,然后从中调用它Button/Worksheet_BeforeDoubleClick
.
如果您仍想从按钮调用它,请确保所有相关检查都已到位,包括正确的错误处理程序.