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

时间:2013-11-28 19:40:01

标签: excel vba excel-vba

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

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

Call Worksheet_BeforeDoubleClick(Selection,true)

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

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

1 个答案:

答案 0 :(得分:5)

  

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

是的,有一个主要缺陷。 Selection必然可能不是范围。见这个例子

  1. 插入按钮

  2. 插入空白图表

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

  4. enter image description here

    假设我们有这段代码

    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
    

    现在按下按钮,您将收到错误。

    enter image description here

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

    说过你 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调用它。

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

相关问题