Testarea unei macrocomenzi în Visual Basic Editor

Dacă o macrocomandă nu funcționează atunci când este executată în aplicația gazdă, cea mai rapidă modalitate de a afla ce se întâmplă este de a deschide macrocomanda în Editorul Visual Basic, de a o executa și a vedea unde nu funcționează codul:

  1. În aplicația gazdă, se apasă Alt+F8 sau se alege View > Macros pentru a afișa fereastra de dialog Macros.
  2. Se selectează macrocomanda, apoi clic pe butonul Edit. Aplicația gazdă deschide o instanță a Visual Basic Editor și afișează macrocomanda pentru editare.
  3. Pornirea macrocomenzii se face apăsând tasta F5. Alternativ, se poate alege Run > Run Sub/ UserForm sau clic pe butonul Run Sub/UserForm (săgeata verde de pe bara cu instrumente Standard din Visual Basic Editor).

Dacă macrocomanda conține o eroare și se oprește executarea ei (comută la modul Break), VBA afișează un mesaj de eroare și în fereastra Code este evidențiată linia de cod care conține eroarea (linia este afișată cu litere albe pe fond albastru). Instrucțiunea pot fi editată pentru a rezolva problema. După acest lucru, macrocomanda se poate parcurge pas cu pas, așa cum este descris în secțiunea următoare.


Înțelegerea modurilor VBA Editor

Editorul VBA se poate afla în unul din cele trei moduri:

  • Design mode pentru proiectarea unui formular sau scriere cod (comenzi)
  • Execution mode după apăsarea tastei F5, pentru executarea codului, folosit de obicei pentru verificarea lui
  • Break mode când execuarea codului este oprită (pentru a putea examina variabilele sau a controla ce se petrece în cod)

Editorul oprește execuția și intră în modul Break în mai multe situații:

  • când apăsați Ctrl + Break,
  • de fiecare dată când apăsați F8 pentru a parcurge codul,
  • atunci când Editorul întâlnește un punct de întrerupere care a fost setat în cadrul codului sau când apar anumite tipuri de erori.

Dacă editorul este în modul de întrerupere (Break), în bara de titlu a Editorului (chiar în partea de sus a Editorului) este afișat cuvântul [break]. De asemenea, linia de cod care urmează să fie executată este evidențiată în galben.

Cu clic pe butonul Reset din bara cu instrumente Standard din Editorul Visual Basic (pătratul albastru de lângă butonul Break - simbolul pentru pauză) se poate trece de la modul Break la modul normal de editare (Design - editare) pentru a putea face modificări în fereastra Cod, a revizui și retesta macrocomanda.

Dacă nu se poate scrie în Editor sau dacă Editorul se comportă ciudat, se face clic pe butonul Reset pentru a ieși din modul Break și a restabili normalitatea.


Testarea Macrocomenzilor se face doar în fișierele neimportante

Se recomandă ca macrocomenzile să fie testate în documente sau fișiere (sau copii ale acestora) neimportante. Astfel, se evită pierderea unei lucrări valoroase – în cazul în care se execută o macrocomandă netestată care face modificări nedorite.

De asemenea, codul se stochează într-o locație centrală (cum ar fi Normal.dotm în Word sau în Macro Personal Macro Workbook din Excel), astfel încât să fie accesibil tuturor fișierelor, nu numai fișierului care le conține. Dacă o macrocomandă a fost creată într-un fișier greșit, ea poate fi exportată din acel fișier și importată în spațiul de stocare centralizat. Pentru a exporta o macrocomandă, se face clic dreapta pe modulul acesteia din Project Explorer, se alege Export File din meniul contextual, se folosește caseta de export fișier pentru a specifica folderul și numele fișierului, apoi se face clic pe butonul Save. Pentru a importa un modul, se face clic dreapta pe proiectul de destinație din Project Explorer, se selectează Import File, se selectează fișierul din caseta de import fișier, apoi se face clic pe butonul Open.

Pas cu pas în macrocomandă (Step Into)

Pentru a vedea exact ce face o macrocomandă, se poate parcurge acea macrocomandă, executând câte o comandă la un moment dat, ca și cum s-ar viziona un meci de fotbal redat cu încetinitorul. Astfel se poate vedea efectul fiecărei comenzi. Trecerea printr-o macrocomandă poate dura mult timp, dar este una dintre cele mai bune modalități de a identifica problemele și de a le repara.

De exemplu, puteți comuta oricând la document, prezentare sau foaie de calcul pentru a vedea efectul comenzii executate în cod.

De obicei, depanarea se folosește pentru a afla unde este eroarea din cod. Deși, în general, se cunoaște care este eroarea, trebuie să se afle locația erorii din cod, pentru a determina modul în care are loc eroarea.

Pentru a parcurge treptat o macrocomandă, se urmează pașii:

1. Se deschide aplicația gazdă, apoi se deschide macrocomanda care va fi editată apăsând Alt + F8. Se selectează macrocomanda, apoi clic pe butonul Editare.

2. Uneori este utilă aranjarea ferestrelor Editor Visual Basic și aplicația gazdă, astfel încât să poată fi văzute simultan. Aranjarea ferestrelor se poate face fie manual, fie folosind o comandă Windows.

De exemplu, ferestrele pot fi stivuite pe ecran cu clic dreapta în spațiul liber de pe bara de sarcini Windows și selectând Show Windows Stacked din meniul contextual. Alternativ, se poate selecta Show Windows Side by Side. Dacă sunt și alte aplicații care rulează, ele pot fi minimizate astfel încât acestea să nu fie incluse în stivă. (În cazul în care sunt două monitoare, unul poate fi folosit pentru Editor și unul pentru aplicație.) În Windows 7 sau Windows 8, cea mai rapidă modalitate de a afișa două ferestre este prin glisarea unei ferestre spre extrema stângă – fereastra se va fixa la acea locație și se va redimensiona automat, astfel încât aceasta va ocupa 50% din ecran). Apoi se trage cealaltă fereastră spre dreapta. În Windows 8 sau mai nou se selectează fereastra și se folosește combinația de taste tasta Windows și tastele săgeți stânga sau dreapta.

3. Apoi se pregătesc condițiile pe care le așteaptă macrocomanda. Poate că trebuie să fie un document deschis. De exemplu, pentru o macrocomandă care aplică un stil paragrafului, este necesară existența unui paragraf.

4. Clic în codul macrocomenzii. Locația liniei verticale intermitente (cursorul de introducere) este modul în care Editorul determină cu care macrocomandă se lucrează.

5. Se apasă tasta F8 pentru a începe parcurgerea macrocomenzii. De fiecare dată când se apasă tasta F8, va fi executat un rând al codului VBA. Editorul Visual Basic evidențiază cu galben fiecare comandă pe măsură ce este executată și se poate comuta la aplicație pentru a urmări efectul și pentru a încerca să vedea eventualele erori.

Apăsarea tastei F8 este cea mai rapidă metodă de a parcurge o macrocomandă

Parcurgerea unei macrocomenzi poate fi realizată și cu Debug > Step Into sau cu clic pe butonul Step Into din bara cu instrumente Debug, dar apăsarea tastei F8 este metoda cea mai simplă. Tasta trebuie apăsată repetat, până la localizarea erorii. Apăsarea unei singure taste este o metodă mai eficientă comparativ cu deschiderea repetată a unui meniu.

Setarea punctelor de întrerupere

Pentru o linie de cod se poate specifica un punct de întrerupere pentru a spune VBA să oprească acolo executarea macrocomenzii. După introducerea unui punct de întrerupere, se poate apăsa tasta F5 pentru a executa rapid părți funcționale cunoscute ale unei macrocomenzi la viteză maximă după care Editorul se oprește automat la punctul de întrerupere. Punctul de întrerupere se pune exact înainte locul unde se crede că se află eroarea. Astfel, nu trebuie parcurs tot codul. Macrocomanda se poate executa la viteză normală, rapidă, apoi se oprește în apropierea locației suspecte și prin apăsarea tastei F8 se parcurge codul, executându-l încet, instrucțiune cu instrucțiune, pentru a observa îndeaproape comportamentul codului. Pot fi setate mai multe puncte de întrerupere.

Pentru a activa sau a dezactiva un punct de întrerupere, se face clic dreapta pe o linie de cod executabil (NU pe o linie de comentarii) și se selectează din meniul contextual Toggle> Breakpoint sau se face clic pe butonul Toggle Breakpoint din bara de instrumente Edit.

Mai rapid, se face clic pe bara de indicatoare gri din stânga liniei de cod.

Linia de cod setată cu un punct de întrerupere este marcată cu un punct roșu închis. Punctul de întrerupere este afișat ca un cerc roșu pe bara indicatorului de margine.

Punctele Breakpoint nu sunt permanente

Punctele de întrerupere (Breakpoint) sunt temporare - Visual Basic Editor nu le salvează în cod. Ele trebuie specificate la fiecare sesiune.

Comentarea liniilor

Ca în majoritatea limbajelor de programare, VBA permite adăugarea de comentarii la cod, pentru a fi mai ușor de înțeles. Comentariile pot fi foarte utile la crearea de cod, la revizuirea propriului cod după o perioadă mai mare de timp sau pentru a vedea ce face codul realizat de altcineva.

Dar mai există o și altă utilizare pentru comentarii. Liniile de cod pot fi comentate pentru a împiedica executarea acestora de către Editorul Visual Basic. Cu alte cuvinte, comentariile sunt, în mod normal, doar note care nu fac parte din macrocomandă. Ele nu sunt scrise în VBA, nici Editorul nu le acordă atenție atunci când examinează codul pentru erori sau execută codul. Deci, uneori, în timpul depanării, se pot comenta linii de cod executabil din macrocomandă. Astfel, în timpul execuției, linia comentată nu este executată. Este ignorată.

Aceasta poate fi o tehnică utilă pentru a sări peste codul suspect, fără a-l elimina din macrocomandă. Apoi se rulează codul pentru a vedea care este diferența cu liniile comentate ignorate. Dacă eroarea dispare, probabil se află în liniile care sunt comentate. De exemplu, dacă macrocomanda șterge brusc și în mod eronat unele linii din document și apoi nu mai face acest lucru atunci când unele linii sunt comentate, eroarea a fost găsită!

Pentru a comenta manual o linie, se tastează un apostrof (') chiar la începutul liniei. Alternativ, se poate folosi comanda Rem în locul apostrofului. (Rem este scurtă pentru observație – remarcă și liniile de comentariu sunt uneori numite linii de remarcă). Pentru decomenta linia manual, se șterge apostroful sau Rem.

Editorul Visual Basic oferă comenzi convenabile pentru adăugare și eliminare comentarii în bloc - pentru mai multe linii. Se selectează liniile vizate de cod, se face clic pe butonul Comment Block din bara de instrumente Editare pentru a plasa un apostrof la începutul fiecărui rând; pentru a elimina o linie sau un grup de linii selectate din blocul cu comentarii, se face clic pe butonul Uncomment Block și Editorul Visual Basic elimină apostroful de la începutul fiecărei linii selectate.

Comanda Comment Block folosește doar apostrof, nu și linii cu Rem. Pentru a folosi Rem, liniile trebuie comentate sau decomentate manual. Dar Rem se folosește foarte rar.

Comenzile Comment Block pot fi Eficiente

Comanda Comment Block adaugă câte un apostrof la începutul fiecărei linii din blocul selectat, chiar și la liniile care au deja apostrof (acest lucru nu deranjează). Comanda Uncomment Block elimină doar un apostrof de la începutul fiecărei linii selectate în loc să elimine toate apostrofurile. Acest comportament ajută la păstrarea liniilor commentate și permite folosirea de diferite niveluri pentru comentare.

Ieșirea dintr-o Macrocomandă

După identificarea și rezolvarea problemei cu o macrocomandă, nu mai este necesară parcurgerea restului macrocomenzii. Pentru a rula restul macrocomenzii și alte macrocomenzi apelate, se poate apăsa din nou tasta F5. Alternativ, se poate face clic pe butonul Run Sub / UserForm din bara de instrumente Standard sau din bara de instrumente Debug sau se poate alege Run> Continue.

Pentru a executa doar restul macrocomenzii și a reveni la macrocomanda care a declanșat această macrocomandă, se folosește comanda Step Out. Comanda Step Out termină executarea macrocomenzii sau procedurii curente la viteză maximă, iar dacă codul continuă cu o altă procedură, editorul Visual Basic revine la modul Break, pentru a putea examina codul procedurii respective.

Pentru a emite comanda Step Out, se poate apăsa Ctrl + Shift + F8, se poate face clic pe butonul Step Out din bara de instrumente Debug sau se alege Debug> Step Out.