Makro, mens Løping, Stopper Excel fra Svare

December 28  by Eliza

Når Dave skriver en makro som må behandle mye informasjon i en For ... Neste sløyfe, alltid bruker han statuslinjen for å indikere fremgang. Vanligvis vil han ha en melding vises det som "Processing rad X til Y." Når "Y" er en stor verdi (den øverste enden av For ... Neste loop), Excel ofte slutter å oppdatere statuslinjen og viser noe sånt som "Svarer ikke" i Excel tittellinje. Makroen er fortsatt kjører, skjønt, og når den er ferdig, starter Excel reagerer og alt fungerer som det skal. Dave lurer på hvordan han kan gjøre Excel slutte å oppføre seg på denne måten, og i stedet vise statuslinjen oppdateringer som han vil.

Dette problemet ser ut til å oppstå når det ser ut til Windows at Excel har sluttet å svare. (Det er Windows, tross alt, er at ansvaret for det som vises i et program tittellinje.) Jeg var i stand til å gjenskape problemet ganske lett hvis jeg har flere programmer åpne i Windows, og jeg klikker på en annen programvinduet mens Excel chunking gjennom en lang makro. Egentlig, hvis Excel er opptatt med å utføre makroen eller det kan ikke holde opp med å be Windows til å oppdatere statuslinjen, og den gjør det, faktisk ser ut som Excel har sluttet å svare.

Det er to mulige måter som kan benyttes. Først, kan du bruke DoEvents kommandoen i sløyfen. Normalt brukes til å instruere makro for å ta hensyn til noe som er i hendelser køen, for eksempel når noen trykker på tastaturet. Det tilsvarer tvinge Excel til å "slå opp" fra makro som den virker og for å kommunisere med Windows. Dette vil, nødvendigvis, la Windows vet at Excel virkelig er responsiv og la oppdateringene til statuslinjen for å oppstå. Du kan selv sette kommandoen rett etter oppdatering av statuslinjen:

Application.StatusBar = "Processing rad" & X & "av" & Y
DoEvents

Den andre ting å prøve er å rett og slett ikke oppdaterer statuslinjen så mye. Hvis den øvre enden av sløyfe er veldig stor, så kan det være bedre å beregne en prosentandel og oppdatere statuslinjen når noen del av den totale er ferdig-kanskje hver 5% eller 10% av totalen. Dette ville bety statuslinjen bare må oppdateres 10 eller 20 ganger i løpet av loop, snarere enn hundrevis eller tusenvis av ganger. Dette kan bety at Windows kan holde tritt med forespørsler om å oppdatere statuslinjen, og som en bonus, kan makroen kjøre raskere fordi den ikke trenger å oppdatere statusfeltet så ofte.

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (13341) gjelder for Microsoft Excel 2007, 2010, og 2013.