2010-04-29 91 views
11

我知道我在這裏做錯了什麼。我試圖使用睡眠函數來延遲我的代碼,但我得到「Sub或Function not defined」錯誤。有小費嗎?VBA睡眠不起作用

回答

17

VBA沒有Sleep函數。

您可以從Kernel32.dll中這樣導入:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

注意,這將凍結的申請。
您也可以在While循環中調用DoEvents,該循環不會凍結應用程序。

+0

代碼我應該把這個聲明?我試圖將它粘在我正在工作的sub的外部和內部,但是同時得到錯誤。 – sooprise 2010-04-29 13:39:29

+0

什麼錯誤?嘗試將其放入模塊中。 – SLaks 2010-04-29 13:40:52

+0

哦,哎呀,我試圖把它放入一個excel對象(愚蠢的我)。我把它放在一個模塊中,現在它可以工作。非常感謝!我檢查了你的答案。 – sooprise 2010-04-29 13:45:35

7

您也可以暫停當前的宏上下文Application.Wait T這將不會阻止整個過程。

4

我試過的一切都似乎掛起了應用程序,包括Application.Wait。這似乎工作,雖然:

waitTill = Now() + TimeValue("00:15:00") 

While Now() < waitTill 
    DoEvents 
Wend 
+0

我喜歡這個,它工作得很好..只有一個例外。我無法找到500毫秒的方法...所以1秒鐘是最短等待時間。有沒有辦法做少於1秒? – BobNoobGuy 2015-07-06 17:24:02

+0

如果您想要更高的分辨率,您可以在kernel32.dll中使用GetSystemTime:http://www.freevbcode.com/ShowCode.asp?ID=1618或者如果在Excel中,您可以調用電子表格now()函數([now ()]從VBA)也有更高的分辨率:https://groups.google.com/forum/#!topic/microsoft.public.excel.programming/-D6lkjJv2ew – 2015-07-08 07:21:38

2
Application.Wait DateAdd("m", 10, Now) ' Wait for 10 Minutes 
Application.Wait DateAdd("s", 10, Now) ' wait for 10 seconds 
+2

歡迎來到堆棧溢出!感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 – 2013-02-20 11:03:33

+0

@AndrewBarber:看看這個鏈接,它看起來不像Babu的網站,而是對SO的有用閱讀。你爲什麼要刪除它? – 2013-02-20 11:16:47

+0

@PeterAlbert這是巴布的網站。他們最近一直在發送垃圾郵件(他們的多個答案被刪除爲垃圾郵件,因爲他們甚至沒有包含這麼多信息),並且這是他們的個人資料。 – 2013-02-20 20:25:00