首页 > 解决方案 > 在 Excel VBA 中,尝试将输入的月份数转换为完整日期

问题描述

您好,我正在尝试将输入的月份数转换为包含当年该月最后一天的完整日期(mm/dd/yyyy)。例如,如果用户要输入“01”,我需要存储日期“01/31/2021”。如果他们输入“11”,那将是“2021 年 11 月 30 日”。我觉得我只是在放屁,应该很简单,但我想不通。

截至目前,我正在使用此代码

Dim stopDate, defaultDate As String

If (Day(Now()) < 10) Then
    defaultDate = Format(WorksheetFunction.EoMonth(Now(), -2), "mm/dd/yyyy")
Else
    defaultDate = Format(WorksheetFunction.EoMonth(Now(), -1), "mm/dd/yyyy")
End If
stopDate = InputBox("Input the last day of the last month (mm/dd/yyyy) of the 12 month period.", "User date", defaultDate)

因此,如果今天的日期在该月的前 9 天内,则默认为上个月的最后一天,如果超过该月的前 9 天,则默认为上个月的最后一天。这个默认日期是我们大部分时间需要的,但是如果需要更改默认日期,那么用户必须输入新的月份和该月的新最后一天,我想避免麻烦。如果用户不必知道和输入他们需要的哪个月的最后一天,例如“09/30/2021”将其存储在 stopDate 变量中,他们只需输入“09”并输入“09/ 30/2021" 存储在 stopDate 变量中

标签: excelvbadate

解决方案


尝试:

Function someDate(mnth As Long) As Date
    someDate = DateSerial(Year(Date), _
        mnth - IIf(Day(Date) > 9, 0, 1), 0)
End Function

如果我了解您在做什么,如果今天的日期>9,这应该返回上个月的最后一天,否则它将返回前第二个月的最后一天。

上个月的最后一天通过函数中的0forDay参数获取Dateserial


推荐阅读