VBA:DateAdd和EoMonth在循环中停止正常工作

所以我想要做的是在一个单元格中开始一个date,然后在它下面的每一行显示一个月后的date。 所以在第一列第三行我有1919年 – 三月,所以我想第一列第四行是1919 – 四月,依此类推。 我写了一个代码来做到这一点:

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是之前确定的date,TotalMonths是之前确定的整数。 当我这样做,它的工作原理,我想它会工作一段时间,但在835行,它开始搞乱了。 1988年5月 – 1988年5月 – 1900年6月 – 1900年1月 – 1月

然后它会在1月份重复一段时间,然后有时会显示1900年2月或1900年 – 3月,但最奇怪的是,最后一行显示的是2015年 – 7月,这是没有意义的,因为前一行单元格是1900年3月 – 即使我尝试使用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年我就遇到了这个问题:6,有没有人知道这里出了什么问题?

我自己想清楚了; 这是我的一个愚蠢的错误。 我的代码后面的部分影响了date列的一部分,我猜测date会变得混乱,所以我修复了代码的索引,以至于影响了我实际上希望它影响的电子表格部分。

我已经尝试了1000个月的例子,它的工作原理:
1988年1月 –
1988年 – 2月
1988年3月
1988年 – 4月
1988年 – 5月
1988 – Jun
1988 – Jul
1988年 – 8月
1988年9月 –
1988年 – 10月
1988年 – 11月
1988年 – 12月

你有没有尝试过使用DateSerial?

 Sub test() Dim MinDate As Date Dim TotalMonths As Long Dim i As Long MinDate = DateSerial(1919, 1, 1) TotalMonths = 1000 Worksheets("FormattedData").Cells(3, 1) = MinDate Worksheets("FormattedData").Cells(3, 1).NumberFormat = "yyyy - mmm" For i = 1 To TotalMonths With Worksheets("FormattedData") .Cells(3 + i, 1) = DateSerial(Year(.Cells(3 + i - 1, 1)), Month(.Cells(3 + i - 1, 1)) + 1, 1) .Cells(3 + i, 1).NumberFormat = "yyyy - mmm" End With Next i End Sub