時間處理是VBA中另外一個常見的需求。相對來講,時間表示的數(shù)據(jù)完整性會比較差。我們會遇到各種各樣格式的時間表達方法,把這些表達轉(zhuǎn)化成有效地系統(tǒng)可識別的時間就很有必要
獲取當前時間/日期
這是最基本的一個需求。先把系統(tǒng)時間打印出來。
其實實現(xiàn)起來很簡單
讓我們看個例子:
Sub DateFunc()
? ?Debug.Print Now
? ?Debug.Print Date
? ?Debug.Print Time

End Sub
返回
2017/7/13 0:35:52
2017/7/13
0:35:52
沒錯vba 將當前日期轉(zhuǎn)化成數(shù)值,A哥的確是在深夜寫的這篇文章
生成時間
很多情況下,我們得到的時間格式并不是標準的內(nèi)部自帶格式,因此需要轉(zhuǎn)換成內(nèi)部時間格式。
我們常見的生成時間有兩種方式,從字符串獲得,或者是直接通過數(shù)字指定。針對這兩種方式,VB都內(nèi)置了函數(shù):
把字符串轉(zhuǎn)成時間格式
表達式如下
TimeValue(strtime)
是一個表示時間的字符串,輸入格式用冒號:把小時,分鐘和秒分開即可。
中參數(shù)的值超過正常數(shù)值會報錯的。例如(“14:23:67”)會報錯,大家可以自己試試看。
把指定數(shù)字改成時間格式,用法為:
TimeSerial(hour,minute,second)
如果某個參數(shù)值設(shè)置超過我們上面所說的范圍,系統(tǒng)會自動轉(zhuǎn)換成合理的時間。例如,66分鐘會自動進位為1小時6分
Sub GenTime()
? ?Debug.Print TimeValue("14:23:50")
? ?'返回14:23:50
? ?Debug.Print TimeSerial(14, 23, 50)
? ?'返回14:23:50
? ?Debug.Print TimeSerial(0, 66, 0)
? ?'66分鐘折合成1小時6分鐘,返回1:06:00

End Sub
生成日期
與生成時間相類似,日期轉(zhuǎn)換也有兩個內(nèi)置函數(shù)
用法為:
DATEVALUE(date_text)
其中是表示日期的字符串
值得注意的是:在執(zhí)行轉(zhuǎn)換時, 函數(shù)使用我們計算機的區(qū)域設(shè)置和日期/時間設(shè)置來理解文本值。 如果當前日期/時間設(shè)置以月/日/年的格式表示日期,則字符串“1/8/2009”將轉(zhuǎn)換為與 2009 年 1 月 8 日等效的 值。 但是,如果當前日期和時間設(shè)置以日/月/年的格式表示日期,則相同字符串將轉(zhuǎn)換為與 2009 年 8 月 1 日等效的 值。
例如,如果在立即窗口輸入下面內(nèi)容,則會返回2009/8/1
?DATEVALUE("8/1/2009")
其中vba 將當前日期轉(zhuǎn)化成數(shù)值,?是表示Print,也就是在立即窗口打印這個表達式的值。
類似的,可以指定年月日來使用來得到一個系統(tǒng)可識別的日期。
Sub GenDate()
? ?Debug.Print DateValue("2017-02-05")
? ?Debug.Print DateSerial(2017, 2, 5)
End Sub
總結(jié)一下