我有一个Worksheet_BeforeDoubleClick事件,它在目标单元格中打开一个列表框。我被要求通过按钮提供相同的功能,而不是(或除了)双击。
在我输入的按钮的Click事件中:
Call Worksheet_BeforeDoubleClick(Selection,true)
...所以按钮只需“双击”单元格。它似乎运作良好,但在我开始在整个项目中使用这种技术之前,我想知道是否存在我应该注意的陷阱。
从另一个事件或标准代码模块调用事件时,最佳做法是什么?
答案 0 :(得分:5)
我想知道是否存在我应该注意的陷阱。
是的,有一个主要缺陷。 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
调用它。
如果您仍想从按钮调用它,请确保所有相关检查都已到位,包括正确的错误处理程序。