1. Является ли опасение, что программа / оборудование будет «перегружено» законным?
Зависит от того, что вы подразумеваете под "перегружен". В зависимости от вашего точного кода это может привести к тому, что один процессор будет работать непрерывно и, следовательно, нагреваться. Но компьютеры обычно рассчитаны на то, чтобы справляться с этим, и это не должно вызывать проблем, если вы не препятствуете их вентиляции. Это может разрядить аккумулятор ноутбука довольно быстро. Все это действительно зависит от того, что именно делает ваш код.
Что касается "перегрузки программы", я не знаю, что это значит, но это приятно приводит к вашему второму вопросу:
2. Есть ли практическая разница между модулем самозвонка и циклом while, который никогда не заканчивается?
Да, есть разница. Поскольку вы спрашиваете об этом на stackoverflow.com, вам будет интересно узнать, что ваш первый бит кода (процедура, вызывающая сам себя) буквально приведет к переполнению стека . Вы не «перегружаете процессор», вы исчерпываете память, доступную в стеке вызовов. Этот объем памяти не бесконечен, но чуть больше его занимает каждый раз, когда вы вызываете вашу 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