如何在VBA中使用显式选项正确定义相互连接的递归子例程?

How to properly define interconnected recursive sub routines with option explicit in VBA?

提问人:aik3e 提问时间:1/21/2023 更新时间:1/21/2023 访问量:32

问:

在我完成以下代码后,我发现 VBA 不喜欢嵌套子例程,现在我不知道如何在尊重 Option Explicit 语句的同时定义彼此外部的子例程,并在彼此之间正确调用其他子例程,同时还尊重递归调用的堆栈溢出预防的计数器。

Option Explicit
Sub OuterSub(counter As Integer)
    ' Code
    
    Sub InnerSubA(rng As Range, prompt As String)
        'Code
        ' Run outersub recursively
        OuterSub (counter + 1) ' Counter to prevent stack overflow
        'Code
    End Sub
    
    ' Code
    ' Run 1st Inner sub
    InnerSubA rng, prompt
    ' Code
    
    Sub InnerSubB(counter As Integer)
        ' Code
        ' Recursively call itself
        InnerSubB (counter + 1) ' Counter to prevent stack overflow
        ' Code
        ' Run InnerSubA
        InnerSubA rng, prompt
        'Code
    End Sub
    
    ' Run 2nd Inner Sub
    InnerSubB 0
    
    'Code
    
End Sub

Sub main()
    ' Run OuterSub
    OuterSub 0
End Sub

我尝试在外部子定义内部子,但意识到它可能不起作用,因为我想尊重 Option Explicit 语句,并且由于内部子调用外部子,反之亦然,我不知道我应该按哪个顺序定义它们。这有点像先有鸡还是先有蛋的情况。此外,计数器在递归调用中递增,如果内部子的定义在外面,我不确定如何维护它们。

VBA 递归 嵌套

评论

0赞 braX 1/21/2023
VBA 不支持这样的嵌套 Sub 定义。你是否在想上课?
0赞 aik3e 1/21/2023
不,不是一堂课。谢谢。
0赞 braX 1/21/2023
使用模块/表单级别变量在Subs之间共享它们。 使用Public/Global变量在模块/表单之间共享它们。您设置它的方式根本行不通。
0赞 braX 1/21/2023
stackoverflow.com/questions/33162030/......

答: 暂无答案