VBA Excel 调用和运行中断回溯

标签 vba excel

我正在制作一个包含大量不同子项的工作簿,并且为了避免用户意外激活删除工作表代码的子项,例如,我尝试将所有子项设为私有(private)。

我的潜艇现在只能通过单击工作表上的按钮来激活,并且一切都按预期工作。当然,直到我的一个子尝试在另一个模块中调用私有(private)子。

为了解决这个问题,我使用了 Application.Run而不是 Call ,它工作并且还允许我从前一个子中调用变量“NextSub”,这给了我一些我需要的灵 active ,并且显然无法使用 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已经解决了我所有的问题,但是我曾经有一个叫做 errorhandler 的行,它又叫做 sub.似乎程序不能再像我使用 Call 时那样回溯到包含错误处理程序的子程序。 .

是否 Applciation.Run打破这个功能?如果是,我可以使用Call吗?像我现在正在做的那样使用变量 NextSub?如果我不能使用 Call那样,然后通过添加 On Error GoTo ErrorHandler 来解决所有这些问题在受影响的潜艇?

我知道跨模块调用 Private Subs 的整个事情可能是非常糟糕的做法,但是当我开始时,我对此完全陌生,而且该项目过于广泛,无法在不重写所有代码的情况下解决这个问题。

最佳答案

不要将所有子程序设为私有(private),而是将 Option Private Module 放在每个模块的顶部,或者为每个例程添加一个虚拟参数:

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

关于VBA Excel 调用和运行中断回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44825854/

相关文章:

arrays - 使用变体数组加速每个循环。 Excel VBA

php从excel表获取数据到mysql(如何避免第一行?)

excel - 保护 Excel VBA 代码的最佳方法?

Excel VBA 如何使用超链接在工作表之间将信息从一个单元格复制到另一个单元格

excel - 由另一个复选框触发的自动选择复选框

macos - Powerpoint 2011 Mac报告对象“_Slide”的方法“导出”失败

vba - 获取工作簿连接名称

excel - 是个 。在 .Cells 定义时是否需要在 .Range 中?

excel - 如何解决 VBA 错误 "Unable to get the selected property of the range class "

excel - 在一列重复数字中显示一个数字