我使用自动过滤宏来获取从今天到 3 个月的值,但虽然结果似乎正确,但格式化的日期显示错误:
Sub LastThreeMonths()
Dim strDateFirst As String
Dim strDateLast As String
Dim strMonthNow As String
strMonthNow = Month(Now)
strDateFirst = (strMonthNow - 3) & "/" & "1" & "/" & frmEntry.cboYear.Value
strDateLast = strMonthNow & "/" & LastDay(CDate(strMonthNow)) & "/" & frmEntry.cboYear.Value
MsgBox Format(strDateFirst, "dd-mm-yyyy") & vbCrLf & Format(strDateLast, "dd-mm-yyyy")
End Sub
Debug.Print 返回strDateFirst
2022 年 7 月 1 日的这个值和strDateLast
2022 年 10 月 30 日的这个值,变量应为“2022 年 7 月 1 日” strDateFirst
。
但过滤器工作正常。
我遗漏了什么?我猜这与从当前月份中减去“3”有关。
答案1
使用正确的类型声明并使用 DateSerial 设置日期:
Sub LastThreeMonths()
Dim DateFirst As Date
Dim DateLast As Date
DateFirst = DateSerial(frmEntry.cboYear.Value, Month(Now) - 3, 1)
DateLast = DateSerial(frmEntry.cboYear.Value, Month(Now) + 1, 0)
MsgBox Format(DateFirst, "dd-mm-yyyy") & vbCrLf & Format(DateLast, "dd-mm-yyyy")
End Sub
通过设置日期,0
将Month(Now) + 1
返回当前月份的最后一天。