2011-12-01 41 views
0

我正在使用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函數失敗的代碼。

任何想法如何使列標題(頂部行中的文本,跨越多列)以DateAdd和dd-mmm格式正確地遞增年份?或者我應該看看更改我的Application.Match(),以便它不返回錯誤2042?

這裏就是匹配失敗:

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

因爲我不能自我回答:看起來像是我將FORMAT()函數更改爲Format(DateAdd(「d」,i,dteLowestStartDate),「Short Date」)它工作正常。 – user1075999

回答

0

看起來像如果我只是改變我的FORMAT()功能Format(DateAdd("d", i, dteLowestStartDate), "Short Date")它工作正常。