2009-07-03 88 views
8

我有一個例程,檢查數以千計的記錄尋找差異。這可能需要5分鐘才能完成,雖然我提供了一個進度條和經過時間計數,但我不確定我是否會鼓勵民間人士按Ctrl-Break退出報告,如果報告時間長於預期的話。如何讓用戶退出長時間運行的VBA任務?

由於窗體是非模態的,進度條中的按鈕將不起作用,那麼在這種情況下是否允許用戶退出?

回答

11

您需要DoEvents和一個變量,其範圍大於您正在運行的範圍。也就是說,如果它只是一個過程,則需要一個模塊級變量。如果它不止一個模塊,則需要一個全局變量。看到這裏

Stopwatch at DDoE

通常情況下,直到把它完成VB引擎會佔用處理器。但是,使用DoEvents,VB允許處理器處理隊列中的下一個任務,然後返回到VB。

+0

很好的回答!不知道你能做到這一點! – mandroid 2009-07-06 19:13:16

0

我不認爲有辦法做到這一點就像你想它的工作。 VBA是一種腳本語言,所以當你開始你的程序時,它會運行直到完成。如果你在另一個按鈕的某個地方甚至會讓你在原始程序運行時點擊它,我不知道你將如何引用該程序並停止它。

你可以做一些事情,比如詢問用戶他們是否想繼續鍛鍊,但這會讓它跑得更長。

此外,您可以讓您的程序檢查Excel以外的情況,並且只要它是真的就保持運行狀態。簡單的事情可能是檢查某個文本文件是否位於文件夾中。如果您希望程序停止,請打開文件夾並移動文件。在你的循環的下一次迭代中,它不會看到文件並停止運行。 Cludgy,低效率,不優雅,但它會工作。您也可以讓它檢查單元格,複選框,單選按鈕,基本上在另一個Excel實例中運行的另一個Excel表單中的任何控件。再次咯咯地笑。

CTRL + Break的作品。接受它並繼續前進。然而,一個巧妙的技巧是,如果你密碼保護你的代碼,並且他們擊中了CTRL + Break,調試選項將不可用,並且它們只會得到Continue或End。

如果這是經常運行的代碼,您是否考慮過在人們不使用計算機的時候編寫腳本來運行它?我曾經運行過需要花費數小時才能通過我們的小部件的telnet屏幕抓取宏,但是我總是讓它們在單獨的計算機上運行,​​或者當我不在時(晚上/週末)運行它們。