除范圍之外,變量還有存活期,在這一期間變量能夠保持它們的值。在應(yīng)用程序的存活期內(nèi)一直保持模塊級變量和公用變量的值。但是,對于 dim 聲明的局部變量以及聲明局部變量的過程,僅當(dāng)過程在執(zhí)行時這些局部變量才存在。通常,當(dāng)一個過程執(zhí)行完畢,它的局部變量的值就已經(jīng)不存在,而且變量所占據(jù)的內(nèi)存也被釋放。當(dāng)下一次執(zhí)行該過程時,它的所有局部變量將重新初始化。
但可將局部變量定義成靜態(tài)的,從而保留變量的值。在過程內(nèi)部用 static 關(guān)鍵字聲明一個或多個變量,其用法和 dim 語句完全一樣:
static depth
例如,下面的函數(shù)將存儲在靜態(tài)變量 accumulate 中的以前的運營總值與一個新值相加,以計算運營總值。
function runningtotal (num)
static applessold
applessold = applessold + num
runningtotal = applessold
end function
如果用 dim 而不用 static 聲明 applessold,則以前的累計值不會通過調(diào)用函數(shù)保留下來,函數(shù)只會簡單地返回調(diào)用它的那個相同值。
在模塊的聲明段聲明 applessold,并使它成為模塊級變量,由此也會收到同樣效果。但是,這種方法一旦改變變量的范圍,過程就不再對變量排他性存取。由于其它過程也可以訪問和改變變量的值,所以運營總值也許不可靠,代碼將更難于維護。
聲明所有的局部變量為靜態(tài)變量
為了使過程中所有的局部變量為靜態(tài)變量,可在過程頭的起始處加上 static 關(guān)鍵字。例如:
static function runningtotal (num)
這就使過程中的所有局部變量都變?yōu)殪o態(tài),無論它們是用 static、dim 或 private 聲明的還是隱式聲明的??梢詫?static 放在任何 sub 或 funtion 過程頭的前面,包括事件過程和聲明為 private 的過程。