簡體   English   中英

在 Excel VBA 中,嘗試將輸入的月份數轉換為完整日期

[英]In Excel VBA, trying to convert an inputted month number to a full date

您好,我正在嘗試將輸入的月份數轉換為包含當年該月最后一天的完整日期(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 變量中

嘗試:

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

如果我了解您在做什么,如果今天的日期>9,這應該返回上個月的最后一天,否則它將返回前第二個月的最后一天。

Dateserial function 中的Day參數使用0獲得上個月的最后一天。

感謝 Ron Rosenfield,我能夠解決問題並完成所需的 DateSerial function 和 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.", "User date", defaultMonth))
stopDate = DateSerial(Year(Date), month + 1, 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM