1、一般延時
乙個應用介面需要限制執行速度,需要在迴圈中加個延時函式,這個延時不需要多麼精確,要求有個幾秒延時,網上用的比較多的就是用timer函式編寫,timer是vba自帶的函式,用起來比較方便,一般程式如下:
'延時程式
sub delay(t as single)
dim time1 as single
time1 = timer
dodoevents
loop while timer - time1 < t
end sub
雖然一般用這個函式延遲用秒做單位,但1秒以內的延時也是可以的,老一點的機器時鐘中斷為每秒18.2次,就是說時間間隔在0.055秒(55毫秒)左右,現在的機器一般都比這個高,具體多少需要測試。timer函式根據時鐘中斷記錄當天的時間序列值,以秒為單位,也就是從當天0點開始到當前時間點上所經歷的秒數(含小數)。當從23:59分鐘跨越到0點是,timer函式的時間也重新歸零開始計算。通過檢視函式中的timer值得變化情況,可以確定時鐘中斷的間隔。例如本人的機器timer值變化如下:
56742.09
56742.11
56742.13
56742.14
56742.16
56742.16
56742.17
56742.19
56742.2
56742.22
56742.23
可以看出,時間間隔在10-20毫秒之間(精確顯示實際精度是0.015625秒,15.625毫秒)。如果時延在1秒以內,精度要求不高,就可以用這個方法,如:
delay(0.25)
由於延時函式中使用了 doevents語句交出了系統控制權,所以不會影響使用者的其它操作。
上面方法雖然簡單,但是有乙個致命的缺陷,就是timer函式的時間每天都是從0開始,如果從23:59:59開始延時1秒以上的話,這個延時程式將永遠執行下去,下面的延時程式將彌補這個缺陷:
'延時程式
sub delay(t as single)
dim time1, time2 as single
time1 = timer
dodoevents
time2 = timer - time1
if time2 < 0 then time2 = time2 + 86400 '86400=24*3600
loop while time2 < t
end sub
2、精確延時
精確延時可以使用sleep函式,sleep函式是windows api函式,使用前必須先宣告,然後使用,例如:
private declare sub sleep lib "kernel32" alias "sleep" (byval dwmilliseconds as long)
。。。sleep 1000 '延時1秒
。。。sleep函式延時是毫秒級的,精確度比較高,但它在延時時會將程式掛起,使作業系統暫時無法響應使用者操作,所以在長延時的時候不適合使用它。
更好的辦法是使用timegettime函式,timegettime函式返回的是開機到現在的毫秒數,可以支援1毫秒的間隔時間,而且永遠增加,不存在回頭的問題。當然不是永遠不回頭,畢竟long型變數(雙字,4位元組)也是有取值範圍的,這個值在0到2^32之間。大約49.71天。
同sleep函式一樣,timegettime函式是windows api函式,使用前必須先宣告,即:
private declare function timegettime lib "winmm.dll" () as long
延時函式和上面的一樣,只是將timer函式換成timegettime:
'精確延時程式
sub delay(t as long)
dim time1 as long
time1 = timegettime
dodoevents
loop while timegettime - time1 < t
end sub
注意:延時時間單位是毫秒。由於延時函式中使用了 doevents語句交出了系統控制權,所以不會影響使用者的其它操作。
VBA研究 VBA提供的檔案操作
最近乙個學習vba的同事問我如何用vba修改檔名,我給他說了一下方法,順便也整理一下常用的幾種操作方法。這兒說的檔案操作是指作業系統級別的,不是開啟檔案,對檔案內容操作。我們當然可以建立檔案系統物件操作檔案,但是,最簡單的還是使用vba提供的標準的檔案操作功能。最常見的就是檔案或資料夾的增 刪 改。...
vba中dir用法 vba中dir函式使用心得
dir pathname attributes 構建測試環境如下 一 測試在dir函式中使用萬用字元來查詢多個檔案,在vbe中輸入 如下 sub listfiles dim strpath as string,strtmp as string strpath c test strtmp dir st...
VBA學習5 VBA常用函式
1,vba字串函式列表 trim string 去掉string左右兩端空白 ltrim string 去掉string左端空白 rtrim string 去掉string右端空白 len string 計算string長度 left string,x 取string左段x個字元組成的字串 righ...