Vba DateAdd的语法

Vba DateAdd的语法,vba,excel,Vba,Excel,我正在尝试使用Excel的DateAdd函数查找下一个工作日的 无论对句点参数使用d、w还是y,它都会提供相同的结果 我尝试了以下代码,在所有3列中都得到了相同的结果 Sub test() Dim i As Integer For i = 1 To 9 Debug.Print i; Debug.Print DateAdd("d", i, #9/10/2009#); Debug.Print DateAdd("w", i, #9/10/

我正在尝试使用Excel的DateAdd函数查找下一个工作日的

无论对句点参数使用d、w还是y,它都会提供相同的结果

我尝试了以下代码,在所有3列中都得到了相同的结果

Sub test()
    Dim i As Integer
    For i = 1 To 9
        Debug.Print i;
        Debug.Print DateAdd("d", i, #9/10/2009#);
        Debug.Print DateAdd("w", i, #9/10/2009#);
        Debug.Print DateAdd("y", i, #9/10/2009#)
    Next i
End Sub
结果:
1 11/09/2009 11/09/2009 11/09/2009
2 2009年9月12日2009年9月12日2009年9月12日2009年9月12日
3 2009年9月13日2009年9月13日2009年9月13日2009年9月13日
4 2009年9月14日2009年9月14日2009年9月14日2009年9月14日
5 2009年9月15日2009年9月15日2009年9月15日2009年9月15日
6 2009年9月16日2009年9月16日2009年9月16日2009年9月16日
7/09/2009 17/09/2009 17/09/2009
8/09/2009 18/09/2009 18/09/2009
9 19/09/2009 19/09/2009 19/09/2009

文件摘录: 返回包含已添加指定时间间隔的日期的变量(日期)

Syntax  
DateAdd(interval, number, date)  
...  
interval Required. String expression that is the interval of time you want to add.   
....  

The interval argument has these settings:  

Setting Description   
yyyy Year   
q Quarter   
m Month   
y Day of year   
d Day   
w Weekday   
ww Week   
...  
周为“ww”,年为“yyyy”

更正代码:

Sub test()
    Dim i As Integer
    For i = 1 To 9
        Debug.Print i;
        Debug.Print DateAdd("d", i, #9/10/2009#);
        Debug.Print DateAdd("ww", i, #9/10/2009#);
        Debug.Print DateAdd("yyyy", i, #9/10/2009#)
    Next i
End Sub
来自文档:

DateAdd函数的语法为:

DateAdd ( interval, number, date )
interval是要添加的时间/日期间隔。它可以是以下值之一:

Value   Explanation
yyyy    Year
q   Quarter
m   Month
y   Day of the year
d   Day
w   Weekday
ww  Week
h   Hour
n   Minute
s   Second
number是要添加的间隔数


date是应该添加间隔的日期。

您的示例将为今天的三个不同版本添加相同的数字。“d”表示当前日期。“w”表示一周中的某一天,例如1表示星期日(默认值)。“y”代表一年中的某一天。9月16日是今年365年的第259天

为了得到你想要的东西,请执行以下操作:

Sub test()
    Dim i As Integer
    For i = 1 To 9
        Debug.Print i;
        Debug.Print DateAdd("d", i, #9/10/2009#)    ' adds i days
        Debug.Print DateAdd("ww", i, #9/10/2009#)   ' adds i weeks
        Debug.Print DateAdd("yyyy", i, #9/10/2009#) ' adds i years
    Next i
End Sub
产出:

 1 9/11/2009 9/17/2009 9/10/2010 
 2 9/12/2009 9/24/2009 9/10/2011 
 3 9/13/2009 10/1/2009 9/10/2012 
 4 9/14/2009 10/8/2009 9/10/2013 
 5 9/15/2009 10/15/2009 9/10/2014 
 6 9/16/2009 10/22/2009 9/10/2015 
 7 9/17/2009 10/29/2009 9/10/2016 
 8 9/18/2009 11/5/2009 9/10/2017 
 9 9/19/2009 11/12/2009 9/10/2018 

编辑:尽管DateAdd文档的语言很混乱,但还是可以查看一些workday数学。DateAdd不添加工作日。“W”只会增加n天(如您所发现的)。您可以滚动自己的函数,也可以执行以下操作: 在Excel中,转到工具>加载项并打开VBA的分析工具包。 在VBE中,转到工具>参考并将参考设置为atpvbaen.xls。 现在,您可以在VBA中使用WorkDay函数

Public Sub Test()
    MsgBox CDate(Workday(Date, 3))
End Sub

DateAdd(“w”没有按预期工作-Microsoft承认了这一点,并在

上发布了一个解决方案。我知道ww和yyyy做什么!这不是问题。我想获得下一个工作日(或工作日)@Patrick weekday!=工作日。将工作日添加到日期只会增加到一周中的第二天。例如,将一个工作日添加到星期五会给出一个星期六的日期。这相当于添加一天。你能指出任何可能会提出其他建议的文档吗?对我的答案进行了一点编辑…@Glenn:我在原始问题中添加了一个摘录f从帮助中,第一个参数是一个时间间隔。从这一点上,我理解“d”是添加一天,而“w”是添加一个工作日。否则两者都有是愚蠢的。你能不能只使用基于星期几的条件,而不是DateAdd函数?错。参数代表一个时间间隔,“w”作为工作日,如文档中所述。从文档中…要将天添加到“日期”,可以使用年中的天(“y”)、天(“d”)或工作日(“w”),DateAdd函数不会返回无效日期。以下示例将一个月添加到1月31日:DateAdd(“m”,1,“1995年1月31日”)在这种情况下,DateAdd返回的是95年2月28日,而不是95年2月31日。如果date是96年1月31日,它返回的是96年2月29日,因为1996年是闰年。从我的即时窗口:?DateAdd(“ww”,2,#9/10/2009#)9/24/2009这个问题已经有了一个公认的答案,可以在您的链接中解释这个问题