VBA当中的时间日期函数

目前还没发现VBA中有直接的函数能够将完整的年月日时分秒的文本格式日期转换成日期型日期的,那只能使用间接实现的办法。用dateserial + timeserial的方法。因为dateserial和timeserial两个都是时间格式的,故可以直接相加,形成的效果和正常日期格式一致。如下图c和f,都是日期+时间形成的。那么再和其他的日期做比较就方便的多了。

If Hour(Range("q" & ddfp)) >= 8 And Hour(Range("q" & ddfp)) < 16 Then
ThisWorkbook.Sheets("运营日报").Range("r" & ddfp) = DateDiff("n", .Range("u" & dft), .Range("aa" & dft)) / 60 '订单分配用时,时间相隔小时数
ThisWorkbook.Sheets("运营日报").Range("s" & ddfp) = DateDiff("n", .Range("aa" & dft), .Range("x" & dft)) / 60 '仓配交接用时,时间相隔小时数
ThisWorkbook.Sheets("运营日报").Range("u" & ddfp) = WorksheetFunction.Sum(ThisWorkbook.Sheets("运营日报").Range("R" & ddfp & ":" & "T" & ddfp))

ElseIf Hour(Range("q" & ddfp)) >= 16 And Hour(Range("q" & ddfp)) < 24 Then
ThisWorkbook.Sheets("运营日报").Range("r" & ddfp) = 0
ThisWorkbook.Sheets("运营日报").Range("s" & ddfp) = 0
a = VBA.DateSerial(Year(Range("q" & ddfp)), Month(Range("q" & ddfp)), Day(Range("q" & ddfp)) + 1)   '日期函数,和worksheetfunction的date函数使用方法和效果都一样。
b = VBA.TimeSerial(8, 0, 0)   '时间函数,和worksheetfunction的time函数方法和效果一样。
c = a + b

d = VBA.DateSerial(Year(Range("ab" & ddfp)), Month(Range("ab" & ddfp)), Day(Range("ab" & ddfp)))
e = VBA.TimeSerial(Hour(Range("ab" & ddfp)), Minute(Range("ab" & ddfp)), Second(Range("ab" & ddfp)))
f = d + e

h = Hour(f - c) + Minute(f - c) / 60        '小时数= 小时数+分钟数/60

原文地址:https://www.cnblogs.com/shida-liu/p/9517133.html