如何解决在 Excel VBA 中,尝试将输入的月份数字转换为完整日期
您好,我正在尝试将输入的月份数字转换为当前年份 (mm/dd/yyyy) 的该月最后一天的完整日期。例如,如果用户要输入“01”,我需要存储日期“01/31/2021”。如果他们输入“11”,那就是“11/30/2021”。我觉得我只是在放屁,它应该是一些简单的事情,但我无法弄清楚。
截至目前,我正在使用此代码
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 变量中
解决方法
试试:
Function someDate(mnth As Long) As Date
someDate = DateSerial(Year(Date),_
mnth - IIf(Day(Date) > 9,1),0)
End Function
如果我理解你在做什么,如果今天的日期 >9,它应该返回上个月的最后一天,否则它将返回上个月的最后一天。
通过在 0
函数中使用 Day
作为 Dateserial
参数获得上个月的最后一天。
感谢 Ron Rosenfield,我能够解决问题并使用 DateSerial 函数和 1 行额外代码完成所需的工作
Dim month As Long
Dim stopDate,defaultMonth As String
If (Day(Now()) < 10) Then
defaultMonth = Format(WorksheetFunction.EoMonth(Now(),-2),"mm")
Else
defaultMonth = Format(WorksheetFunction.EoMonth(Now(),-1),"mm")
End If
month = InputBox("Input the last month (mm) of the 12 month period there is data for.","User date",defaultMonth)
stopDate = DateSerial(Year(Date),month + 1,0)
,
这可以减少 - 并且尺寸缺乏一点 - 所以:
Dim month As Integer
Dim stopDate As Date
Dim defaultMonth As String
defaultMonth = Format(DateAdd("m",-1,DateAdd("d",-9,Date)),"mm")
month = Val(InputBox("Input the last month (mm) of the 12 month period there is data for.",defaultMonth))
stopDate = DateSerial(Year(Date),0)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。