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;@")読み取られるだけで、1 月 1 日に年が正しくインクリメントされますが、関数DateAdd("d", i, dteLowestStartDate)を使用する後続のコードは失敗します。Application.Match

列ヘッダー (最上行のテキスト、複数の列にまたがる) をDateAdddd-mmm 形式で年を正しくインクリメントする方法はありますか? または、Application.Match()エラー 2042 を返さないように変更することを検討する必要がありますか?

マッチが失敗する場所は次のとおりです。

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

1 に答える 1

0

FORMAT()関数を変更するだけで問題ないように見えFormat(DateAdd("d", i, dteLowestStartDate), "Short Date")ます。

于 2011-12-02T15:49:32.173 に答える