【问题标题】:What happens when i call a sub vba当我调用 sub vba 时会发生什么
【发布时间】:2015-10-30 10:14:50
【问题描述】:

我正在使用调用函数来激活其他宏,但我不确定 VB 是如何读取这个函数的。 (我在 MS Excel 2010 中使用它)

例如:

Sub main macro ()

blabla
blabla

Call Edit
Call Save
Call HistoryLog

End Sub

这段代码有一些 If 函数,并且在某些时候会到达“调用编辑” 这里宏“Sub Edit()”将被激活。但我需要这段代码来编辑数据,将数据保存到一个新文件中,并在另一个 Excel 表中创建历史记录。

如果 VBA 完成了“Sub Edit()”部分,代码将如何继续? 它是否调用“Sub Save()”部分? 还是我真的需要在“Sub Edit()”部分的末尾键入“Call Sub Save”?

【问题讨论】:

    标签: vba excel-2010 call


    【解决方案1】:

    VBA 将按照给定的顺序处理您的所有代码行,除非其中一个发生错误。事实上,您的代码只会在错误点停止。

    在哪里调用Save() 取决于您希望代码如何工作。如果您想确保在每次调用Edit() 后保存更改,我会在Edit() 中调用Save()。如果有时您想在不调用 Save() 的情况下调用 Edit(),则不应将对 Save() 的调用放入 Edit()。

    【讨论】:

    • oke,当我使用上面提到的代码时会发生什么? 1. Sub Edit 被调用, 2 Sub Edit 完成 3.?它会开始运行保存吗?或者它会继续它下面的第一个子。 (忽略“呼叫保存”和“呼叫历史记录”,因为代码被跳转到子编辑,所以永远不会读取呼叫保存和呼叫历史记录)?提前致谢
    • 您对编程很陌生,不是吗?除非您调用它们,否则宏中的 subs 不会被执行。如果你从sub main macro() 中删除所有call 行,你会发现什么都没有发生。只有您实际从主子程序直接或间接调用的子程序才会被执行。当主子程序完成或发生导致主子程序提前结束的错误时,执行停止。
    【解决方案2】:

    当您从另一个过程中调用一个过程时,程序控制返回到Call 行下方的行。在您的示例中,当Edit 过程到达End Sub 或Exit Sub 行时,程序控制将继续在Call Save 行(Call Edit 正下方的行)上。

    Call 关键字包含在语言中以实现向后兼容性。您可以调用编辑过程,如

    Edit
    

    没有Call 关键字。如果你喜欢使用Call,它并没有什么坏处。

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多