VBA研究 VBA中編寫延時函式

2021-07-07 04:11:28 字數 2056 閱讀 3710

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...