VBA中日期之间的总和

时间:2019-02-18 16:13:49

标签: ms-access access-vba

此处的代码不适用于totaldate中的进程,因为我检查它没有从date1date2中减去,但是它们已经得到了诸如

Text1 = 2/10/2019

Text2 = 2/8/2019

我正在尝试从两个文本框Text1Text2中减去两个日期,我已经确保它们的格式是短日期。

我确实做到了totaldate = Text1 - Text2,但它也不起作用

Sub tgl()
    date1 = Text1
    date2 = Text2
    totaldate = date1 - date2
    fine = totaldate * 50
End Sub

在此输出中,将所有日期加起来后,将减去Text1Text2,然后再乘以50,将剩下2天。变量fine = 100的值

2 个答案:

答案 0 :(得分:0)

使用DateDiff功能

DateDiff("d", date1 , date2)

答案 1 :(得分:0)

MS Access中的日期存储为自1899年12月30日午夜以来经过的天数,时间部分用十进制格式表示为一天的一小部分,例如:

?cdate(1.5)
31/12/1899 12:00:00 

如果您的日期值没有时间成分,那么简单地将两个日期值相减就可以得出分隔两个日期的天数:

?#2019-02-10#-#2019-02-08#
 2 

但是,如果您的datetime值也有一个时间分量,则对两个值进行基本减法将产生一个双倍而不是整数值:

?#2019-02-10 09:30#-#2019-02-08 07:00#
 2.10416666667152 

因此,您将需要使用DateDiff函数,指定间隔days,或使用DateValue函数返回datetime值的日期部分:< / p>

?DateDiff("d",#2019-02-08 07:00#,#2019-02-10 09:30#)
 2 
?DateValue(#2019-02-10 09:30#)-DateValue(#2019-02-08 07:00#)
 2 

考虑到这一点,您可以考虑按照以下方式将Sub更改为某些内容(假设这是在您的表单模块中定义的,其中变量Text1Text2在范围内) :

Sub tgl()
    Dim fine As Long
    fine = (DateValue(Text1) - DateValue(Text2)) * 50
End Sub

这还将说明您的Text1Text2值是字符串而不是日期值。