Excel 2010在执行格式时忽略年份(DateAdd(“d”,i,<some date =“”>),“[$ -409] d-mmm; @”)</some>

时间:2011-12-01 18:26:09

标签: excel vba formatting dateadd

我正在使用Excel 2010 VBA,我正在创建基本时间轴。以下是代码片段,它以“D-MMM”的形式创建一些列标题,基于开始日期和跳过周末。

   i = 0
' Add column headers based on the day of the week. Skip working on Saturday and Sunday; do not show weekends
Do
    ' D-MMM format = "[$-409]d-mmm;@"
    ActiveCell.Value = Format(DateAdd("d", i, dteLowestStartDate), "[$-409]d-mmm;@")
    ActiveCell.Interior.Color = RGB(153, 204, 255)

    ' IF it's a weekend do not print those days in the column
    If Format(ActiveCell.Value, "dddd") = "Friday" Then
        ' Skip Saturday, Sunday
        i = i + 3
      Else
        ' Weekday
        i = i + 1
    End If
    ActiveCell.Offset(0, 1).Select
'End processing more column headers once the start date + index(i) is a few days greater then end date
Loop Until DateAdd("d", i, dteLowestStartDate) > DateAdd("d", 3, dteHighestStartDate)

代码执行并正确显示列标题。我的问题是,当1月1日到来时,它保持当前年份(今天是2011年),但我预计它将是2012年。

作为测试,我删除了FORMAT(... ", "[$-409]d-mmm;@")部分,因此它只是读取DateAdd("d", i, dteLowestStartDate)重新运行,并且它正确地增加了1月1日的年份,但随后我使用的代码使用Application.Match 1}}功能失败。

任何想法如何使列标题(顶行中的文本,跨越多列)正确地使用DateAdd和dd-mmm格式增加年份?或者我应该考虑更改我的Application.Match(),以便它不会返回错误2042?

以下是比赛失败的地方:

colStartDate = Application.Match(CLng(dteStartDate), Range(colLetter & "1:XFD1"), 0)

1 个答案:

答案 0 :(得分:0)

如果我只是将我的FORMAT()功能更改为Format(DateAdd("d", i, dteLowestStartDate), "Short Date"),它就可以了。