Excel 2010, игнорирующий год при выполнении Format (DateAdd ("d", i, <некоторая дата>), "[$ -409] d-ммм; @") - PullRequest
0 голосов
/ 01 декабря 2011

Я использую 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 января, он сохранит текущий год (сегодня 2011), но я ожидал, что это будет 2012 год.

В качестве теста я удаляю часть FORMAT(... ", "[$-409]d-mmm;@"), поэтому она просто читает повторный запуск DateAdd("d", i, dteLowestStartDate) и корректно увеличивает год с 1 января, но затем последующий код, который использует функцию Application.Match, завершается неудачей.

Есть идеи, как сделать, чтобы заголовки столбцов (текст в верхней строке, охватывающий несколько столбцов) правильно увеличивали год с помощью DateAdd и с форматом dd-mmm? ИЛИ я должен смотреть на изменение моего Application.Match(), чтобы он не возвращал ошибку 2042?

Вот где матч не удался:

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

1 Ответ

0 голосов
/ 02 декабря 2011

Похоже, что если я просто изменил свою функцию FORMAT() на Format(DateAdd("d", i, dteLowestStartDate), "Short Date"), она работает нормально.

...