excel - 循环程序-在其内部调用模块是一个坏主意吗?

标签 excel infinite-loop vba

我有一个想要持续运行的程序。按照我现在的编码方式,一旦它到达其函数的末尾,它就会调用自身;它实际上从未到达其“结束子行”。

Sub run

    *Run all code here*

    Call run

End Sub

对此提出了疑问,担心该程序永远没有机会“弹出”所有已“推”到它上面的东西。基本上,一段时间后不断的自调用会使cpu过载。建议的替代方案是使用一个永远不会结束的 while 循环,本质上

Sub run

While program_run = true then

    *Run all code here* 

Loop

End Sub

永远不要让program_run = false。

  1. 我用“外行语”表达了一些内容,因为我不确定正确的技术术语。

  2. 我熟悉列表和数据结构上下文中的术语“pop”和“push”,但仅限于基础水平;我认为这些具体术语不适用于这种情况,但我就是这么说的。 (该程序下载 .csv 并执行一系列数据操作,即格式化、复制/粘贴、上传到 MySQL 等)

  3. 这也与确保硬件不会稳定过载有关,因此如果这在 super 用户中更合适,我理解。

问题:

  1. 对程序/硬件“重载”的担忧是否合理?

  2. 自调用模块和永不结束的 while 循环之间有什么实际区别吗?

感谢您提前提供的任何帮助!

最佳答案

1。对程序/硬件将“重载”的担忧是否合理?

取决于你所说的“重载”是什么意思。根据您的具体代码,这可能会导致一个处理器连续运行并因此升温。但计算机通常被设计为能够处理这个问题,只要不阻碍其通风,就不会造成问题。不过,它可能会很快耗尽笔记本电脑的电池。所有这些实际上取决于您的代码到底在做什么。

至于“程序重载”,我不知道这意味着什么,但它确实很好地引出了你的第二个问题:

2。自调用模块和永不结束的 while 循环之间有什么实际区别吗?

是的,有区别。既然您在 stackoverflow.com 上询问这个问题,您就会有兴趣知道您的第一段代码(自调用过程)实际上会导致 stack overflow 。您没有“使 CPU 过载”,而是耗尽了调用堆栈上的可用内存。这个内存量不是无限的,但是每次您无限次调用 run 过程时,都会占用更多的内存,所以是的,在某些时候您会用完并得到一个堆栈溢出。

至于你的第二段代码,它将无法编译。 (While ... then ... Loop 在 VBA 中不存在。您混淆了三种不同类型的语法。)

如果您绝对确定希望程序运行到时间结束(就您的计算机而言),那么您可以像这样进行无限循环:

Sub run()
    Do
        '*Run all code here*
    Loop
End Sub

但是,您不太可能真的希望代码一直运行到时间结束。我会问自己一个合理的最终条件是什么,然后实现它。

Sub run()
    Dim endConditionReached As Boolean
    endConditionReached = False
    Do While Not endConditionReached 
        '*Run all code here*
        ' code sets endConditionReached to True when appropriate
    Loop
End Sub

关于excel - 循环程序-在其内部调用模块是一个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9300421/

相关文章:

python - 如何使用 PySVN 捕获登录失败?

excel - 带有 AND/OR 函数的 VBA Excel If 语句

excel - 获取多区域联合的外部边界范围

sql-server - 打开的对象上的运行时错误 3704

excel - 让单元格在 "loop"中引用自己的值

recursion - 为什么这个函数会死循环——学习lisp

c++ - 在 C++ 中使用 'deque' 的无限循环

vba - vba中使用 "_"总是报错

vba - 选择在 Excel 宏中具有值的列(VBA 中的范围对象)

python - openpyxl如何在工作表上编辑输入数据后读取公式结果? data_only=True 给我一个 "None"结果