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