Slika okna

Pomoč pri izdelavi makrov
Odgovori
eBrane
Prispevkov: 19
Pridružen: To Jun 01, 2010 12:02 am

Slika okna

Odgovor Napisal/-a eBrane »

Pozdravljeni,
imam težavo, ki je ne znam odpraviti.
Gre za to, da imam narejeno formo, in včasih, ko makro dela v ozadju, ta forma izgubi barvo - vse je belo, včasih pa ne.

Ker gre za večjo obdelavo podatkov, ki traja nekaj minut, je malo "nerodno", da je monitor bel, seveda pa ni vedno.

Prosim torej za nasvet, kaj storiti.

Hvala in lp.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Slika okna

Odgovor Napisal/-a admin »

Pozdravljeni,

V operacijskem sistemu MS Okna je vsak program vsako "okno" samo odgovorno za to, da se izrisuje. V ozadju to izgleda približno tako, da operacijski sistem, ko ugotovi, da se mora okno izrisat pač zaukaže okni naj se izriše in potem se okno samo izriše.

In pri vas se zgodi natanko to. Operacijski sistem zaukaže oknu naj se izriše, okno pa se ne more izrisati, saj v ozadju teče makro in zato ne pride na vrsto, da bi se izrisalo. To kar se vam dogaja se vedno dogaja, le da vi to včasih opazite, včasih pa ne. Ponoviti pa je to trivialno. Zaženite vaše okno in tisti dolgotrajen makro ter poskusite sedaj (v času ko makro teče) premakniti okno ali pa preko njega dajte neko drugo okno in slednjega potem umaknite... Karkoli pač počnete, vaše okno na to ne bo moglo odreagirati (ne bo se moglo izrisati == ostalo bo belo), saj vam v ozadju teče makro, ki preprečuje izris okna. Šele ko se makro konča, se lahko okno izriše.

Sedaj ko sem vam razložil kako in kaj pa je čas za rešitev in slednja je v VBA dokaj preprosta. V vaš makro, je potrebno na ključna mesta vstaviti vrstico

Koda: Izberi vse

DoEvents
Ta vrstica pravzaprav vaš makro za trenutek zaustavi in pogleda ali mora Excel narediti še kaj drugega (npr. izrisati okno) in če mora, potem to naredi sicer se nadaljuje vaš makro. Kam vstaviti to vrstico pa je seveda odvisno od vašega makra, če recimo makro izvaja neko zanko, ki se izvede 100.000x in to vseskupaj se izvaja 30 sekund, pomeni, da zanka vsako sekundo obdela pribljižno 3000 zapisov in to pomeni, da lahko DoEvents pokličete na vsakih 3000 zapisov:

Koda: Izberi vse

For i = 1 to 100000
  ' makro nekaj počne
  
  if (i mod 3000 == 0) then DoEvents
Next
V glavnem sami morate malce premisliti kam v makro postaviti DoEvents.
lp,
Matjaž Prtenjak
Administrator
eBrane
Prispevkov: 19
Pridružen: To Jun 01, 2010 12:02 am

Re: Slika okna

Odgovor Napisal/-a eBrane »

Najlepša hvala za hiter odgovor. Bom poskusil.

Še 1 x hvala in lep vikend.
Odgovori