简单的日期差异引用表单控件

问题描述 投票:0回答:2

我正在尝试进行简单的日期差异计算,该计算返回“年”和“月”值。我现在的代码是:

Private Sub Form_AfterUpdate() 
Dim IntegerYears As Long 
Dim IntegerMonths As Long 

IntegerYears = DateDiff("yyyy", Me.DeemedFilingDate, Now()) 
IntegerMonths = DateDiff("m", Me.DeemedFilingDate - IntegerYears, Now()) 
Me.TimeElapsedFromFilingDate = IntegerYears & " Yr(s)." & " " & "," & " " & IntegerMonths & " Mo(s)." 

End Sub

此时,我以年/月格式获得输出,但这不正确。我得到负数,月份数超过12个月,年份显示1年,开始日期是前一年,但一年不一定过去。例如,如果开始日期是12/1/2017并且当前日期是3/2/2018而不是仅返回3个月,则代码将返回1年。

vba access datediff
2个回答
0
投票

你做了很多不同寻常的事情。让我带你走过它们:

您已将TimeElapsed声明为double,但您将其设置为等于DateDiff的结果,后者返回Variant(Long)

Dim TimeElapsed As Long

您需要在DateDiff中使用字符串分隔符作为第一个参数。此外,它是小写y,而不是大写:

TimeElapsed = DateDiff("yyyy", Now(), Me.DeemedFilingDate)

这一行:

IntegerMonths = Round(TimeElapsed - IntegerYears) * 12

对我毫无意义。你花了很长时间,去掉当时和现在几年之间的时差,然后四舍五入,然后乘以12?

您可能需要以下内容:

IntegerMonths = DateDiff("m", Now(), Me.DeemedFilingDate - TimeElapsed)

此外,VBA并不真正做整数。 VBA中的所有整数都非常长,可根据需要转换为整数。使用long更有效,并且不会占用更多内存。

最后结果:

Private Sub Form_AfterUpdate()
    Dim IntegerYears As Long
    Dim IntegerMonths As Long

    IntegerYears = DateDiff("yyyy", Now(), Me.DeemedFilingDate)
    IntegerMonths =  DateDiff("m", DateAdd("yyyy", IntegerYears *-1, Now()), Me.DeemedFilingDate)
    Me.TimeElapsedFromFilingDate = IntegerYears & " Years " & IntegerMonths & " Months"
End Sub

0
投票

解决:

Private Sub Form_AfterUpdate()
Dim TimeElapsedMonths As Integer
Dim TimeElapsedYears As Integer
Dim TimeElapsedRemMonths As Integer

TimeElapsedMonths = DateDiff("m", Me.DeemedFilingDate, Now())
TimeElapsedRemMonths = TimeElapsedMonths Mod 12
TimeElapsedYears = Int(TimeElapsedMonths / 12)

Me.TimeElapsedFromFilingDate = TimeElapsedYears & " Yr(s)." & "," & " " & 
TimeElapsedRemMonths & " Mo(s)."

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.