Una sau mai multe bucle pot fi imbricate într-o altă buclă pentru a realiza un șablon de repetări: se poate imbrica o buclă For... în altă buclă For..., o buclă For... într-o buclă Do, o buclă Do într-o buclă For..., sau o buclă Do în altă buclă Do.
VBA PERMITE PÂNĂ LA l6 NIVELE DE IMBRICARE, DAR CINE ARE NEVOIE DE O ASEMENEA COMPLEXITATE?
Pot fi imbricate până la 16 niveluri de bucle în VBA, dar codul devine prea complicat. Pentru simplificare, poate fi aleasă o altă abordare pentru a rezolva problema.
De exemplu, dacă trebuie să fie creat un anumit număr de foldere, iar fiecare să conțină un număr de subfoldere, se poate folosi o variantă a procedurii Creare_Foldere de mai sus. Dar la o astfel de procedură trebuie folosită imbricarea.
Caseta de dialog pentru procedură are nevoie de încă o casetă text pentru a scrie numărul de sub-foldere care vor fi create în fiecare folder. Noua fereastră de dialog este numită frmCreareFoldereSiSubFoldere iar caseta de dialog pentru numărul de subfoldere este numit txtCateSubFoldere. Figura următoare arată caseta de dialog.
1. Private Sub cmdOK_Click()
2.
3. Dim strStartingFolder As String
4. Dim strFolderName As String
5. Dim strSubfolderName As String
6. Dim intSubfolder As Integer
7. Dim intLoopCounter As Integer
8.
9. frmCreateFoldersAndSubfolders.Hide
10. Unload frmCreateFoldersAndSubfolders
11.
12. strStartingFolder = CurDir
13.
14. For intLoopCounter = 1 To txtHowManyFolders.Value
15. strFolderName = txtProjectNumber.Value & "s" & _
Format(intLoopCounter, "0#")
16. MkDir strFolderName
17. ChDir strFolderName
18. For intSubfolder = 1 To txtHowManySubfolders.Value
19. strSubfolderName = "Subsection" & intSubfolder
20. MkDir strSubfolderName
21. Next intSubfolder
22. ChDir strStartingFolder
23. Next intLoopCounter
24.
25. End Sub
Iată ce face codul din procedura de mai sus:
FOLOSIREA VARIABILEI CONTOR CU NEXT CÂND SUNT IMBRICATE BUCLELE FOR...
Utilizarea variabilelor contorului cu comanda Next (Următorul) este opțională (în procedura de mai sus, variabilele contorului sunt denumite intLoopCounter și intSubfolder). Se poate folosi pur și simplu Next și VBA înțelege ce are de făcut.
Dar atunci când sunt bucle For... imbricate, este o idee bună să se includă o variabilă de contorizare, pentru vedea mai ușor ce buclă se încheie cu comanda Next (cu alte cuvinte, mai degrabă se folosește Next IntLoopCounter, decât versiunea simplă Next). Utilizarea unei variabile de contor face procedurile mult mai ușor de citit și poate preveni surprizele neplăcute (erorile). Buclele imbricate trebuie să se termine în ordinea inversă exactă a începerii lor, iar contoarele trebuie să se potrivească.