在编写vba的代码中,不可避免的会遇到需要对日期时间进行处理的情况。
在vba中,日期也是以序列号的形式存储的,但是它与excel工作表中存储日期不同的是,1序列号表示的是1899/12/31 ,-1表示的是1899/12/29 ,负数也可以表示日期,表示的日期是早于1899/12/30。
1.在vba中如果要将日期赋值给变量,可以使用如下的语句:
dDate = #5/1/2017#
其中用“#”井号分隔的字符,会被当做日期处理。
2.如果要获取当前的系统日期,可以使用如下的语句:
dDate = Date
其中Date 函数返回当前的系统日期。
如果要修改电脑右下角显示的日期,可以使用Date语句。
3.如果要获取距离当期系统日期前一个月的日期,可以使用如下的语句:
dDate = DateAdd("m", -1, Date)
其中DateAdd 函数既可以计算未来的日期也可以计算过去的日期,第二参数是正数是表示计算距离当期日期以后的日期,负数表示距离当前日期之前的日期。
4.如果要计算两个日期之间相隔的天数,可以使用DateDiff 函数。
它的语法如下:
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
其中第一个参数interval表示,要计算两个日期之间的时间间隔单位。
比如选择”d”,表示计算两个日期之间间隔的天数。
比如选择”h”,表示计算两个日期之间间隔的小时数。
如以下代码所示:
Sub QQ1722187970() Dim d1 As Date Dim d2 As Date d1 = #11/1/2017# d2 = #11/2/2017# '获取两个日期之间间隔的天数 MsgBox VBA.DateDiff("d", d1, d2) '获取两个日期之间间隔的小时数 MsgBox VBA.DateDiff("h", d1, d2) End Sub
5.如果要把字符型的日期字符串转换成vba可以识别的日期数据类型,可以使用DateValue函数,如下代码所示:
Sub QQ1722187970() Dim str1 As String str1 = "1987-08" MsgBox VBA.DateValue(str1) End Sub
6.如果要获得日期代表星期几,可以使用Weekday函数。
它的语法如下:
Weekday(date, [firstdayofweek])
其中第一个参数为日期,第二个参数为指定哪天是一周的开始。
我们一般把周一当做一周的开始,故可以使用如下的代码判断一天具体是星期几:
Sub QQ1722187970() Dim dDate As Date dDate = Date i = Weekday(dDate, vbMonday) Select Case i Case 1 Debug.Print "星期一" Case 2 Debug.Print "星期二" Case 3 Debug.Print "星期三" Case 4 Debug.Print "星期四" Case 5 Debug.Print "星期五" Case 6 Debug.Print "星期六" Case 7 Debug.Print "星期日" End Select End Sub
7.如果要根据年、月、日 3个参数来获得具体的日期,可以使用DateSerial函数。
比如要返回2018年10月1日,可以使用如下的代码:
Sub QQ1722187970() Dim d1 As Date d1 = VBA.DateSerial(2018, 10, 1) End Sub
再比如,如果要获取某个月份的最后一天,可以使用如下的代码:
Sub QQ1722187970() Dim d1 As Date d1 = #12/25/2018# Dim d2 As Date d2 = VBA.DateSerial(Year(d1), Month(d1) + 1, 1) - 1 Debug.Print d2 End Sub
发表评论