所以我将最小和最大日期存储为Date
个对象。我尝试在for循环中迭代它们。
Sub dateTest()
Dim min_date As Date
Dim max_date As Date
min_date = ThisWorkbook.Worksheets("setup").Cells(22, 5).value
max_date = ThisWorkbook.Worksheets("setup").Cells(23, 5).value
Dim currentDate As Date
For currentDate = min_date To max_date
MsgBox (currentDate)
Next
End Sub
然而,循环显示每个月的每一天,而我只需要每个月的第一天和(在另一个循环中)仅在1月1日。我该如何做到这一点?
我试过
For currentDate = min_date To max_date Step 7
MsgBox (currentDate)
Next
但它只允许将一天作为一个步骤,因此此代码显示每周一天,而不是每月一天或每年一天。
答案 0 :(得分:2)
此代码将从包含min_date的月份的第一天到包含max_date的月份的第一天干净循环:
extends Shape
答案 1 :(得分:1)
如果您想要一个消息框显示每个月的第一天,您可以检查日期是否为1(每个月的第一天)。
For currentdate = min_date To max_date
If Day(my_date) = 1 Then
MsgBox (my_date)
Else
'Do Nothing
End If
Next
这将返回每月第一天的消息框。
要显示1月1日,请检查月份。
For currentdate = min_date To max_date
If Month(currentdate) = 1 Then
If Day(currentdate) = 1 Then
MsgBox (currentdate)
End If
Else
'Do Nothing
End If
Next
答案 2 :(得分:1)
DateAdd功能应该有所帮助:
假设您的最短日期始终是该月的第一天:
currentDate = GetNextFirstDayOfMonth(min_date)
如果您的最短日期不在该月的第一天,请更换行" currentDate = min_date"与
Function GetNextFirstDayOfMonth(d)
If Day(d) > 1 Then
GetNextFirstDayOfMonth = DateSerial(Year(d), Month(d), 1)
Else
GetNextFirstDayOfMonth = DateSerial(Year(d), Month(d) - 1, 1)
End If
End Function
并添加以下功能:
:after