前言
要不是年會需要使用PPT來做抽獎,我才不會用這么難用的VBA。
VBA要實現(xiàn)延時功能,大多數(shù)教程都會拿2016年ExcelHome里的上古帖子不厭其煩地復(fù)制粘貼,然后你復(fù)制下來發(fā)現(xiàn)根本無法運行。
現(xiàn)在我從頭給你講,到底怎樣在VBA中實現(xiàn)毫秒級延時功能。
思路
思路很清晰,分三步走:
1. 想辦法獲取當(dāng)前時間(time_now1)
2. 然后給這個時間加上一個數(shù)delay_time(這個數(shù)就是你要定時的時長)得到time_then
3. 然后做循環(huán),當(dāng)再次獲取當(dāng)前時間(time_now2)等于time_then的時候跳出循環(huán)。并且注意這個時候最好不要使用獨占CPU的浪費計算資源的方法。
布局
用一個CommandButton1按鈕控件和一個Label1文本控件,在PPT中直觀展示怎樣實現(xiàn)延時功能。
代碼
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
Private Sub CommandButton1_Click()
Dim Savetime As Double
Label1.Caption = "點擊開始計時"
Savetime = timeGetTime
While timeGetTime < Savetime + 500
DoEvents
Wend
Label1.Caption = "延時時間到"
End Sub
代碼解析
1. 先看第一句話:
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
第一句話是很關(guān)鍵的內(nèi)容,但Declare是上古時代的VBA語句,現(xiàn)在已經(jīng)不推薦單獨用了。需要在其后面加上PtrSafe關(guān)鍵字。具體參考:Declare 語句 (VBA) | Microsoft Docs了解如何使用 Declare 語句 (VBA)https://docs.microsoft.com/zh-cn/office/vba/Language/reference/user-interface-help/declare-statement
這句話的功能就是,將winmn.dll這個系統(tǒng)DLL文件中的timeGetTime拎出來,方便后面使用,并且聲明為Long型變量。
2. 再看第二段話:
Private Sub CommandButton1_Click()
Dim Savetime As Double
Label1.Caption = "點擊開始計時"
Savetime = timeGetTime
While timeGetTime < Savetime + 500
DoEvents
Wend
Label1.Caption = "延時時間到"
End Sub
Sub...End Sub經(jīng)典的事件處理函數(shù),CommandButton1是上面拖拽過來的Button控件,CommandButton1_Click()是單擊Button控件后的動作。
在動作里,首先定義了Double型的臨時變量Savetime,用于暫存按鈕按下的時間信息,也即Savetime = timeGetTime
然后做個While...Wend循環(huán),在這個循環(huán)里執(zhí)行DoEvents函數(shù),注意這個函數(shù)是CPU資源友好型函數(shù),功能是交出執(zhí)行控制權(quán),以便操作系統(tǒng)能夠處理其他事件。具體參考:
DoEvents 函數(shù) (Visual Basic for Applications) | Microsoft DocsOffice VBA reference topichttps://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/doevents-function跳出循環(huán)的方法就是獲取到的當(dāng)前時間等于或大于Savetime + 500的值,從而實現(xiàn)了定時。
剛剛跳過的關(guān)于Label1.Caption = "XXX"的兩行代碼,只是為了直觀展示函數(shù)運行狀態(tài),不展開講了。文章來源:http://www.zghlxwxcb.cn/news/detail-469643.html
總結(jié)
做到延時,需要靠“三步走”的方法實現(xiàn),同時也要注意用DoEvent函數(shù)避免CPU資源浪費。用的時候,直接復(fù)制代碼,把500換成想要的毫秒數(shù)即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-469643.html
到了這里,關(guān)于VBA實現(xiàn)毫秒級延時(2022最新版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!