【问题标题】:Function for returning year end date用于返回年终日期的 VBA 函数
【发布时间】:2022-06-15 01:24:40
【问题描述】:

所以我正在研究一个简单的 VBA 函数。因此,对于许多财务报告,报告并不总是在 12 月 31 日结束,有时它们会在 6 月或 3 月或其他任何时间结束。我正在尝试处理的函数采用年终日期并返回当前日期与之后的天数(前瞻性,所以如果年终日期是昨天,那么函数将是 364 天,而不是比1),然后除以365。我在下面进行了尝试,但由于某种原因,它总是返回1。通过一些跟踪,我相信它与DateDiff有关,但从我所看到的我认为我' m 使用正确的语法?不知道怎么回事,谁能帮忙?

Function dateCalc(ye As Date)
    Dim today As Date
    Dim x As Integer
    
    today = Date
    
    If ye < today Then
    x = (365 - DateDiff("d", ye, today)) / 365

    ElseIf ye > today Then
    x = DateDiff("d", ye, today) / 365
    Else
    x = 0
    
    End If
    
    dateCalc = x
End Function



【问题讨论】:

  • 不要使用整数(DI x As Integer),因为您需要逗号后面的数字。我建议加倍。

标签: vba date


【解决方案1】:

使用您的代码的以下派生,

Function dateCalc(ByVal YE As Date) As Double
  If YE < Today Then
    dateCalc = (365 - DateDiff("d", YE, Date)) / 365
  ElseIf YE > Today Then
    dateCalc = DateDiff("d", YE, Date) / 365
  Else
    dateCalc = 0
  End If
End Function

在 2022 年 6 月 14 日,我们看到以下内容:

  • ?dateCalc(#6/15/2022#) 产生 -0.00273972602739726
  • ?dateCalc(#6/13/2022#) 产生 0.997260273972603

请注意,在 YE &gt; Today 的情况下,DateDiff 为 -1。如果你想要一个积极的,否定它。从问题中不清楚这是否是所需的输出,但主要问题似乎是使用Integer 而不是Double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    相关资源
    最近更新 更多