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;@")
読み取られるだけで、1 月 1 日に年が正しくインクリメントされますが、関数DateAdd("d", i, dteLowestStartDate)
を使用する後続のコードは失敗します。Application.Match
列ヘッダー (最上行のテキスト、複数の列にまたがる) をDateAdd
dd-mmm 形式で年を正しくインクリメントする方法はありますか? または、Application.Match()
エラー 2042 を返さないように変更することを検討する必要がありますか?
マッチが失敗する場所は次のとおりです。
colStartDate = Application.Match(CLng(dteStartDate), Range(colLetter & "1:XFD1"), 0)