Evitarea buclelor infinite

Când într-o procedură este creată o buclă infinită (adică fără sfârșit - endless), aceasta va fi executată continuu, dacă utilizatorul nu o oprește cu Ctrl+Break sau cu Ctrl+Alt+Del pentru a deschide Task Manager și a închide aplicația, sau repornește computerul, sau îl scoate din priză. Computerul nu va opri procedura, dar utilizatorul o poate opri.

De exemplu, un tip de buclă este bucla Do...Loop. Așa cum se poate vedea în exemplul următor, fără o condiție atașată, această structură este o buclă infinită. Nu există nicio condiție care să oprească bucla.

1. Sub BuclaInfinita()
2.   Dim x
3.   x = 1
4.   Do
5.      Application.StatusBar = _
6.        "Computerul este blocat intr-o bucla infinita" & x
7.      x = x + 1
8.   Loop
9. End Sub

În procedura de mai sus, linia 2 declară variabila x, iar linia 3 îi atribuie valoarea 1. Linia 4 începe bucla Do, care afișează un mesaj în bara de stare (status-bar) și crește valoarea lui x cu 1. Efectul acestei bucle este de a afișa în bara de stare un mesaj și numărul de bucle până când utilizatorul oprește procedura cu Ctrl+Break sau până când valoarea depășește valoarea maximă pentru acea variabilă. Acest lucru este complet inutil (excepție, poate, ca modalitate de a suprasolicita un computer nou) și poate este un motiv bun de a nu utiliza structura Do...Loop - cel puțin nu fără o condiție atașată la finalul acesteia.

Indiferent de tipul de buclă utilizat, pentru a evita crearea unei bucle infinite, trebuie să se verifice că la un moment dat condiția care va încheia bucla poate fi satisfăcută.

De exemplu, pentru o procedură de editare sau curățare, de multe ori trebuie efectuată o acțiune până la sfârșitul documentului și apoi să se oprească. Sau se poate include o formă de mecanism de numărare pentru a fi siguri că o buclă de tip Do nu depășește un anumit număr de iterații.