【问题标题】:VBA Datediff function is not working properlyVBA Datediff 函数无法正常工作
【发布时间】:2014-10-21 09:10:33
【问题描述】:

datediff 函数不返回正确的值。我只想知道前几个月之间的天差:1/03/2014(开始日期)和 30/03/2014(结束日期)

我测试过的代码:

Dim date1 as date

dim date2 as date

dim test as long

date1 = "1/03/2014"

date2 = "30/03/2014"

test = datediff("d", date1 , date2)

msgbox test

上面的代码返回 86 n,而不是 29 但如果我输入 1/01/2014(开始日期)和 30/01/2014(结束日期),它会起作用,结果是预期的 29 天。

我如何获得正确的值(在这种情况下(三月),29 天)?

【问题讨论】:

标签: vba date excel


【解决方案1】:

使用

DateSerial(2014, 3,1)DateSerial(2014, 3,30)

设置日期。通过像您一样使用字符串,字符串被解释为日期,而 3 月 1 日被解释为 1 月 3 日。转换月份和日期。

根据您的评论,一个简单的转换与您的文本框一起使用,无需任何有效性测试:

strDate = "1/30/2014" 'as an example of the value coming from your TextBox
dateParts = split(strDate, "/") 'returns the date parts an array (zero based)

date1 = dateSerial(datePart(2), datePart(1), datePart(0))

【讨论】:

  • 问题是,我想将文本框的值传递给 datediff 函数。
  • @Feris Tjuanda 查看简单的转换,以将您的格式中指定的日期转换为真实日期。并不是说没有进行任何检查来检查它是否是有效日期。
  • 感谢大家的回复,我使用 format() 函数解决了这个问题,并将变量 date1 和 date2 设置为“DD/MM/YY”并且它可以工作。
【解决方案2】:

不要使用字符串并允许 VBA 尝试将它们解释为日期 - 使用 DateSerial 并具体说明:

date1 = DateSerial(2014, 3, 1)

date2 = DateSerial(2014, 3, 30)

【讨论】:

    【解决方案3】:

    试试这个:

    Dim date1 as date
    
    dim date2 as date
    
    dim test as long
    
    date1 = "1/03/2014"
    
    date2 = "30/03/2014"
    
    test = datediff("y", date1 , date2)
    
    msgbox test
    

    【讨论】:

    • 很抱歉,但这不是问题的答案。您似乎在返回几年的差异,而这完全不是 OP 所要求和描述的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2015-06-28
    • 2018-07-18
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多