Bara de progres - creați o bară de descărcare pe vba

În timpul executării codului în Excel, în cazul performanței pe termen lung a unui proces, este necesar să se informeze utilizatorul că aplicația funcționează în mod constant, și să nu fie agățate, așa cum ar putea părea la prima vedere.

În multe cazuri, acest lucru este suficient pentru a calma utilizatorii programelor dvs. Dacă doriți să raportați mai multe informații, spuneți timpul de procesare rămas, procentul de execuție, permiteți oprirea procedurii, apoi nu se poate renunța la o stare.

Acest articol descrie cum să creați o fereastră de descărcare (sau altfel o bară de progres) pentru procedurile dvs., fără a le aglomera codul.

Puteți descărca fișierul cu clasa la sfârșitul articolului.

Bara de progres a compoziției

O fereastră de descărcare este construită pe baza unui simplu formular de utilizator UserForm care conține următoarele elemente:

  1. Două elemente ale etichetei. Utilizați în total pentru a afișa bara de încărcare. Prima este folosită ca un container și are un fundal diferit de fundal. Al doilea este încorporat în primul și are o lățime dinamică, care variază în funcție de procentul procesului. Fundalul său este diferit de forma și fundalul fundal al elementului părinte. Aceste elemente pot fi înlocuite cu una suplimentară, care se numește ProgressBar, dar cu utilizarea sa pot apărea unele probleme care sunt discutate mai jos.
  2. Trei elemente ale etichetei. Fiecare dintre ele este independentă de celelalte și este destinată să furnizeze informații specifice: durata procesului, timpul rămas, numărul de etape ale procesului care a trecut.
  3. TechBox pentru afișarea mesajelor speciale către utilizator.

Dacă afișați toate elementele din formular, acesta va arăta astfel:

Bara de progres - creați o bară de descărcare pe vba

În caz de inutilitate a acestor sau a altor elemente, ele nu pot fi deduse. Controlul asupra ieșirii elementelor se realizează de către clasa "ProgressBar", o instanță a căreia trebuie mai întâi creată (Set var = New ProgressBar). Apoi, folosind clasa creată, puteți completa programatic forma cu elemente și să le oferiți valori specifice.

Descrierea clasei și a metodelor de creare a ferestrei de încărcare

În primul rând, să examinăm metodele disponibile din această clasă, fără să ne concentrăm asupra codului, ci numai asupra funcționalității sale:

  • Metoda createLoadingBar creează o bară de încărcare a formularului;
  • createString - creează termenul "Procesat: ...%";
  • createtimeDuration - creează termenul "Timp de procesare: ...";
  • createtimeFinish - creează șirul "Timp rămas de procesare: ...";
  • createTextBox - creează un element TextBox;
  • setParameters - stabilește parametrii ferestrei de boot pentru procesul următor. Acceptă 3 argumente:
    • expProcess_INT este un argument necesar. Acceptă un număr întreg indicând câte etape constă din procesul ulterior;
    • UpdateInterval_INT este un argument opțional. Folosindu-l, puteți specifica intervalul pentru actualizarea formularului, adică prin ce număr de etape trebuie să fie actualizate toate elementele ferestrei de descărcare;
    • UpdTimeInterval_INT_SEC este un argument opțional. Specifică intervalul pentru actualizarea formularului în secunde. Argumentul are sens doar dacă argumentul UpdateInterval_INT nu este specificat.
  • În cazul în care ambele argumente care specifică intervalul nu sunt specificate sau se ia valoarea 0, atunci în mod prestabilit intervalul de reîmprospătare va fi egal cu o secundă.
  • Metoda Start - pornește fereastra de descărcare. Această metodă este importantă deoarece afișează forma în sine și își amintește timpul de pornire, care este apoi folosit pentru calcule. Metoda ia un argument opțional - titlu. Cu ajutorul acestuia, puteți seta antetul formularului de bandă de susținere. Valoarea implicită a antetului este egală cu linia "Proces de execuție".
  • Actualizare - actualizează formularul dacă intervalul specificat de metoda setParameters a trecut. Această metodă are două argumente opționale:
    • curProcess este un număr întreg. Numărul stadiului actual al procesului;
    • stringTextBox este șirul pentru elementul TextBox.
  • exitBar - închide bara de progres și descarcă formularul din memorie.
  • getForm - returnează un link la bara de progres a barei.

Acest lucru se întâmplă din două motive.

Al doilea motiv este performanța. În ciuda faptului că ideea de a furniza informații despre încărcătură este complet justificată, însăși utilizarea acesteia încetinește considerabil procesul. De exemplu, folosind ProgressBar, timpul de procesare al exemplului de mai jos este de 1 minut și 17 secunde, intervalul de actualizare fiind setat pe secundă. La actualizarea formularului în fiecare etapă, timp de 2 minute, s-au procesat ușor mai mult de două sute de procente. Fără a folosi totul, a durat 8 secunde. Prin urmare, încercați să utilizați bara de progres numai în cazurile în care este foarte important și aplicați intervalul optim - o secundă este suficientă, nu se observă modificări semnificative ale performanței peste această valoare.

De asemenea, este posibil să opriți executarea tuturor proceselor închizând fereastra de descărcare. Utilizatorul va fi prezentat cu o fereastră de confirmare.

Exemplu de conectare a progresului barei la o macrocomandă

Următorul exemplu este un exemplu simplu de sortare a caracterelor într-un șir. Procedura însăși nu are sens, dar demonstrează bine posibilitățile ferestrei de descărcare.

Bară de descărcare pe mai multe niveluri

Aplicarea clasei descrise în articol vă permite să creați ferestre de încărcare independente pentru procesele cu mai multe niveluri.

Nu este necesară nicio acțiune suplimentară, ci doar să creați o nouă instanță a clasei (New ProgressBar) și să lucrați cu ea, indiferent de procesul părinte.

Recomandare: Pentru procesele copil, adăugați anteturi unice la formularele de descărcare (Header ProgressBar.Start). Acest lucru va notifica utilizatorul programului pe care o subproces rulează în prezent.

Element special al controlului Microsoft ProgressBar

A fost menționat mai sus că banda de descărcare însăși poate fi înlocuită cu un control suplimentar al formularului, care este special conceput pentru acest lucru și se numește Microsoft ProgressBar Control, versiunea 6.0. Pentru ao aplica, faceți clic dreapta pe caseta de taxare și selectați "Control suplimentar".

Bara de progres - creați o bară de descărcare pe vba

Pentru a rezolva această problemă, verificați mai întâi prezența fișierului MSCOMTCL.ocx pe calculatorul dumneavoastră. Aceasta este o bibliotecă care conține controale comune Windows 6.0. Ar trebui să fie localizat în folderul \ Windows \ SysWOW64 pentru OS-uri pe 64 de biți sau \ Windows \ Sistem32 pentru OS pe 32 de biți. Dacă este necesar, descărcați-l și plasați-l în dosarul dorit.

După ce sunteți convins de disponibilitatea bibliotecii, ar trebui să o înregistrați. Rulați promptul de comandă ca administrator (Start -> Toate programele -> Accesorii -> Command Prompt) și executați regsvr32 MSCOMTCL.ocx.

Descărcați exemplul barei de descărcare de pe VBA

Descărcați exemplul VBA de progres cu ajutorul programului Microsoft ProgressBar Control.