Так что я пытаюсь начать с даты в одной ячейке, а затем каждая строка под ней показывает дату, которая является месяцем позже. Поэтому в строке 3 столбца 1 у меня есть 1919 - Мар, поэтому я хочу, чтобы строка 4 столбца 1 была 1919 - апрель и так далее. Я написал код, чтобы сделать это:VBA: DateAdd и EoMonth перестают работать правильно в середине цикла
Worksheets("FormattedData").Cells(3, 1) = MinDate
Worksheets("FormattedData").Cells(3, 1).NumberFormat = "yyyy - mmm"
For i = 1 To TotalMonths
Worksheets("FormattedData").Cells(3 + i, 1) = DateAdd("m", 1, Worksheets("FormattedData").Cells(2 + i, 1))
Worksheets("FormattedData").Cells(3 + i, 1).NumberFormat = "yyyy - mmm"
Next i
Где MinDate является предварительно определена датой и TotalMonths является ранее определенным числом. Когда я это делаю, он работает так, как я предполагаю, что он будет работать некоторое время, но на линии 835 он начинает испортиться. Это, как представляется: 1988 - май 1988 - Июнь 1900 - Jan 1900 - янв
И затем он продолжает повторять с января на некоторое время, то иногда он показывает 1900 - февраль или 1900 - март, но странно, самая последняя строка покажет 2015 - июль, что не имеет смысла, потому что ячейка предыдущей строки - 1900 - март. У меня такая же проблема, даже когда я пытаюсь использовать EoMonth.
В отдельном листе, я попытался следующий код и он работал отлично на протяжении всей своей полноте:
Dim z As Date
z = "01/11/1905"
Worksheets(4).Cells(1, 1) = z
Worksheets(4).Cells(1, 2) = z
Worksheets(4).Cells(1, 3) = z
For i = 1 To 60000
Worksheets(4).Cells(1 + i, 1) = DateAdd("m", 1, Worksheets(4).Cells(i, 1))
Worksheets(4).Cells(1 + i, 2) = WorksheetFunction.EoMonth(Worksheets(4).Cells(i, 2), 1)
Worksheets(4).Cells(1 + i, 3) = WorksheetFunction.EoMonth(Worksheets(4).Cells(1, 3), i)
Worksheets(4).Cells(1 + i, 1).NumberFormat = "yyyy - mmm"
Worksheets(4).Cells(1 + i, 2).NumberFormat = "yyyy - mmm"
Worksheets(4).Cells(1 + i, 3).NumberFormat = "yyyy - mmm"
Next i
Все три колонки имеют один и тот же вывод и его точно так, как я хочу, чтобы она появилась. Но если я попробую эти три общих метода в контексте моего предыдущего кода, я столкнулся с проблемой, что он не работает, когда он достигает 1988 - июнь. Кто-нибудь знает, что здесь происходит не так?
У вас есть условное форматирование или события VBA, прикрепленные к проблемному листу? Можете ли вы загрузить образец, где мы могли бы воспроизвести проблему? – BrakNicku
Я этого не сделал. Я действительно понял, что происходит не так; в моем коде был более поздний раздел, который влиял на столбец дат (и я этого не хотел, у меня была проблема с индексированием, которую я исправил). Спасибо, что нашли время, чтобы помочь. –