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.
Slika okna
Re: Slika okna
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
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:
V glavnem sami morate malce premisliti kam v makro postaviti DoEvents.
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
Koda: Izberi vse
For i = 1 to 100000
' makro nekaj počne
if (i mod 3000 == 0) then DoEvents
Next
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Slika okna
Najlepša hvala za hiter odgovor. Bom poskusil.
Še 1 x hvala in lep vikend.
Še 1 x hvala in lep vikend.