2008-12-03 76 views
2

我有一個表單,它有幾個按鈕,當按下按鈕時會執行代碼,就像在數據庫上運行驗證一樣。運行代碼時的顯示時間

某些代碼可以運行幾分鐘,因此有什麼方法可以顯示剩餘時間或顯示已完成進程百分比的消息嗎?

或者在代碼評估開始時彈出消息,並且代碼運行完成後消息應該消失?

+1

BTW給出的方法。考慮標記你給出的「接受」的一些答案。它是Stack Overflow的貨幣。它贏得了你的聲譽,它贏得了我們的聲譽,如果不這樣做,你實際上鼓勵我們不要回答你的問題。 – BIBD 2008-12-03 15:44:59

+1

我不知道這一點。我會這樣做 – tksy 2008-12-04 09:58:33

回答

1

您可能正在尋找的是「進度條」。

我已經使用了微軟的ProgressBar控件(你可以在Insert-> ActiveX Control下找到它),並且它不是很難使用。只需將其值設置爲百分比(作爲整數,而不是小數)。

'foo, being the ProgressBar 
me.foo = 70 '70% 

這裏有一些好的信息的另一種方法:http://www.granite.ab.ca/access/progressbar.htm

0

爲了做到這一點「正常」的方式,你需要在另一個線程中運行你的驗證,並讓它報告它的進度回到UI線程。但是,我不相信VBA支持任何類型的多線程。

如果您的驗證程序涉及一個循環,甚至只是許多單獨的分立的操作,你可以嘗試在循環迭代(或操作)之間插入DoEvents聲明,然後讓你的進度顯示定期更新(比如說,在一個Application_OnTime事件處理程序)。

0

我通常有一個形式,我叫frmProgress或其他任何形式,帶有取消按鈕和用於顯示狀態消息的標籤。然後嵌入到表單代碼中,我有一個叫做bCancel的布爾值,當你點擊取消按鈕時,它簡單地將bCancel設置爲true。

此外,在此代碼中,我有一個名爲ShowPercDone(Idx,NumIdc)的例程,其中Idx是代碼所在的步驟,而NumIdc是代碼將採取的步驟數(假設每個步驟需要相同的時間)。當我運行一個for循環時,這很好,但基本上任何時候我想要顯示一個狀態更新,我只需在窗體中用我的消息調用例程,我應該添加這個消息來爲我運行doevents命令。

這就是狀態表單的工作原理。在我運行的宏中,我通過調用frmProgress.show(0)開始,讓它可以讓你點擊取消按鈕。然後在我的循環中,當我更新狀態消息時,我檢查frmProgress.bCancel,如果它是真的,我退出宏。

希望有所幫助。