VBA Excel调用和运行破回溯

我正在制作一个有很多不同的子工作簿,为了避免用户不小心激活一个删除工作表代码的子工具,我试着把所有子工具都变成了私有工具。

我的潜艇现在只能通过点击工作表上的button来激活,而且这一切都按预期工作。 直到我的一个子试图在另一个模块当然尝试调用一个私人子。

为了解决这个问题,我使用Application.Run而不是Call来工作,它还允许我从前面的子程序中调用一个variables“NextSub”,这给我一些我需要的灵活性,显然不能使用Call

例如。

 Sub FirstSub() *Something going on Application.Run "SecondSub", SomeVariableSub End sub Sub SecondSub(Nextsub as String) If something Then *Do something Application.Run NextSub Else Application.Run NextSub 

我认为Application.Run已经解决了我所有的问题,但是我曾经有一个叫做error handling器(errorhandler)的行,它又被称为sub。 看来,程序不能再回到包含error handling程序的子程序,就像我使用Call

Applciation.Run是否打破了这个function? 如果是的话,我可以使用Call与variablesNextSub,因为我现在正在做? 如果我不能以这种方式使用Call ,那么是否通过在受影响的子目录中添加On Error GoTo ErrorHandler来解决所有这些问题?

我知道在模块中调用Private Subs的整个过程可能是非常糟糕的做法,但是当我刚开始的时候,我完全是新手,而且这个项目太广泛了,无法重写所有的代码。

而不是让所有的私有私有,或者把选项私人模块放在每个模块的顶部,或者为每个例程添加一个伪参数:

 Sub SomeHiddenRoutine(bDummy As Boolean = False) 'Routine can be called as usual using: SomeHiddenRoutine End Sub 

如果我明白你正试图调用一个string指定的函数。

正确的方法是使用这样的东西,它允许你调用所有的私人潜艇(只要它是在私人function相同的模块):

 Sub CallFunction(FuncName As String) Select Case FuncName Case "Func1": Func1 Case "Func2": Func2 Case "Func3": Func3 End Select End Sub