Olykor előfordul, hogy a makrónk hosszabb ideig fut és elbizonytalanodunk: valóban fut még a kód vagy már lefagyott az egész Excel? Erre nyújthat megoldás az ún. állapotjelző űrlap. Magyarul nem találtam rá igazán megfelelő kifejezést, angolul “progress indicator”-nak vagy “progress bar”-nak szokták hívni.
Lényege, hogy egy űrlapon lévő címke háttérszíne a makrónk futási idejével párhuzamosan növekszik. Akár egy letöltőcsík:
A feni animáció egy egyszerűsített példa: az A, B és C oszlopba írattatunk ki értékeket, az űrlapon pedig láthatjuk, melyik cella van feldolgozás alatt, mennyi ennek a cellának az értéke illetve, hogy a makró futása hol tart (%-ban). A 100% elérése után az űrlap automatikusan bezárul 2,7 másodperc után.
Látványnak sem utolsó, ráadásul igen hasznos, hiszen egyértelmű hogy nem fagyott le az Excel és halad a folyamat előre.
Két fő dolgot emelnék ki a kóddal kapcsolatosan:
1. A makró tartalmazza a “Sleep” nevű API-t (Application programming interface). Ez a makró milliszekundumokban történő megállítását teszi lehetővé. A “Sleep” nem VBA hanem Windows funkció, így deklaráni kell a kódot tartalmazó modul legtetején.
Emiatt (és általában az API-t tartalmazó makróknál) tanácsos a makró futtatása előtt minden más Excel fájlt elmenteni és bezárni, valamint a kódot tartalmazó munkafüzetről másolatot készíteni a futtatás előtt.
2. “DoEvents” parancs melyet itt és itt is használtam már. Ez ideiglenesen leállítja a makró futtatását a képernyő (itt az űrlap) frissítésének céljából.
A makrót és űrlapot tartalmazó mintafájl letölthető innen. Maga a kód a “Munka1” munkalapon található “Run Progress Indicator” gomb megnyomásakor fut le.