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

Sha*_*son 5 excel vba excel-vba

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

在我输入的按钮的Click事件中:

Call Worksheet_BeforeDoubleClick(Selection,true)
Run Code Online (Sandbox Code Playgroud)

...所以按钮只需"双击"单元格.它似乎运作良好,但在我开始在整个项目中使用这种技术之前,我想知道是否存在我应该注意的陷阱.

从另一个事件或标准代码模块调用事件时,最佳做法是什么?

Sid*_*out 5

我想知道是否存在我应该注意的陷阱.

是的,有一个主要的陷阱.该Selection必然可能不是一个范围.看这个例子

  1. 插入一个按钮

  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
Run Code Online (Sandbox Code Playgroud)

现在按下按钮,您将收到错误消息.

在此输入图像描述

工作表事件在需要时也会触发......当选择不合适时,它们不会触发.

说了这么多,你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
Run Code Online (Sandbox Code Playgroud)

但是然后你将放置所有和所有CHECKS的地方:)最好的方法是将它放在一个Sub中,如同@Sam建议,然后从中调用它Button/Worksheet_BeforeDoubleClick.

如果您仍想从按钮调用它,请确保所有相关检查都已到位,包括正确的错误处理程序.

  • +1`TypeName()`非常有用. (3认同)