首页 > 解决方案 > 有没有办法判断当前运行的 Sub 是父级还是被调用的子级

问题描述

我在 VBA 中有可以独立运行或可以由另一个例程调用的例程。当作为子例程(子例程)或主例程(父例程)调用时,我可能会或可能不想执行某些操作。我可以调用 VBA 中的内置函数来告诉我我的执行代码是父代码还是子代码?

我已经创建了全局变量来测试父/子,但我想要一个更优雅的解决方案。

标签: excelvba

解决方案


我认为一个好方法是为动作本身设置一个过程,该过程具有一个开关(参数)和一个调用它的过程。

Private Sub MyProcedure(Optional ByVal IsChild As Boolean = True) 'set default here
    If IsChild Then
        'child
    Else
        'parent
    End If
End Sub

现在你可以有一个过程来调用它

Public Sub ParentCallMyProcedure()
    MyProcedure IsChild:=False
End Sub

Public Sub ChildCallMyProcedure()
    MyProcedure IsChild:=True
    'which would be the same as
    MyProcedure
End Sub

例如,如果您想MyProcedure从按钮调用,然后使用

Public Sub Button1_Click()
    MyProcedure IsChild:=False
End Sub

在所有其他程序中,只需使用MyProcedureandIsChild是默认值True

至少这比公共/全局变量更优雅。


推荐阅读