متوقف می کند
وقتی دیو یک ماکرو می نویسد که باید اطلاعات زیادی را در یک حلقه For...Next پردازش کند، همیشه از نوار وضعیت برای نشان دادن پیشرفت استفاده می کند. به طور معمول، جهنم پیامی مانند "در حال پردازش ردیف X از Y" در آنجا نمایش داده می شود. هنگامی که "Y" یک مقدار بزرگ است (انتهای بالای حلقه For...Next)، اکسل اغلب به روز رسانی نوار وضعیت را متوقف می کند و چیزی مانند "Not Responsing" را در نوار عنوان Excels نمایش می دهد. با این حال، ماکرو هنوز در حال اجرا است و پس از تکمیل، اکسل شروع به پاسخگویی میکند و همه چیز همانطور که باید کار میکند. دیو تعجب می کند که چگونه می تواند کاری کند که اکسل به این شکل رفتار نکند و در عوض، به روز رسانی نوار وضعیت را همانطور که می خواهد نمایش دهد.
به نظر میرسد این رفتار زمانی رخ میدهد که به نظر میرسد که اکسل پاسخ نمیدهد. (به هر حال این ویندوز است که مسئول چیزی است که در نوار عنوان برنامه ظاهر می شود.) اگر چندین برنامه در ویندوز باز داشته باشم و در حالی که اکسل در حال تکه تکه شدن است، به راحتی می توانم این رفتار را بازتولید کنم. یک ماکرو طولانی اساساً، اگر اکسل مشغول اجرای ماکرو است یا نمی تواند از ویندوز بخواهد نوار وضعیت را به روز کند، در واقع به نظر می رسد که اکسل پاسخ نداده است.
دو روش ممکن وجود دارد که می توان از آنها استفاده کرد. ابتدا می توانید از دستور DoEvents در حلقه استفاده کنید. معمولاً از این برای دستور دادن به ماکرو استفاده میشود که به هر چیزی که در صف رویدادها است توجه کند، مانند زمانی که کسی صفحهکلید را فشار میدهد. معادل این است که اکسل را مجبور کنید که از ماکرویی که روی آن کار میکند جستجو کند و با ویندوز ارتباط برقرار کند. این لزوماً به ویندوز اجازه میدهد تا بداند اکسل واقعاً پاسخگو است و اجازه میدهد بهروزرسانیهای نوار وضعیت رخ دهد. حتی می توانید دستور را بلافاصله پس از به روز رسانی نوار وضعیت قرار دهید:
Application.StatusBar = "Processing row " & X & " of " & Y
DoEvents
چیز دیگری که باید امتحان کنید این است که به سادگی نوار وضعیت را چندان به روز نکنید. اگر انتهای بالایی حلقه شما بسیار بزرگ است، شاید بهتر باشد درصدی را محاسبه کرده و نوار وضعیت را زمانی که بخشی از کل تکمیل میشود، بهروزرسانی کنید - شاید هر 5٪ یا 10٪ از کل. این بدان معناست که نوار وضعیت فقط باید 10 یا 20 بار در طول حلقه به روز شود، نه صدها یا هزاران بار. این ممکن است به این معنی باشد که ویندوز میتواند با درخواستها برای بهروزرسانی نوار وضعیت پاسخ دهد و به عنوان یک امتیاز، ماکرو شما ممکن است سریعتر اجرا شود زیرا مجبور نیست بارها نوار وضعیت را بهروزرسانی کند.