我需要创建一个将endDate设置为该月最后一天的vba

时间:2016-06-28 22:51:08

标签: excel vba excel-vba

我有2个单元格,其中一个开始日期指定为startDate,另一个单元格指定为endDate。每次我点击单元格时,都会弹出一个日历,然后输入日期。我希望宏将endDate自动更改为该月的最后一天。因此,当用户进入并输入开始日期时,宏将输入结束日期,即该月的最后一天。这是我现在的代码:

Function dhLastDayInMonth(Optional endDate As Date = 0) As Date
    ' Return the last day in the specified month.
    If endDate = 0 Then
        ' Did the caller pass in a date? If not, use
        ' the current date.
        dtmDate = Date
    End If
    dhLastDayInMonth = DateSerial(Year(endDate), _
     Month(dtmDate) + 1, 0)
End Function

此处还有日历代码:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     'check cells for desired format to trigger the calendarfrm.show routine
     'otherwise exit the sub
    Dim DateFormats, DF
    DateFormats = Array("m/d/yy;@", "mmmm d yyyy")
    For Each DF In DateFormats
        If DF = Target.NumberFormat Then
            If CalendarFrm.HelpLabel.Caption <> "" Then
                CalendarFrm.Height = 191 + CalendarFrm.HelpLabel.Height
            Else: CalendarFrm.Height = 191
                CalendarFrm.Show
            End If
        End If
    Next
End Sub

3 个答案:

答案 0 :(得分:2)

在您的endDate单元格中,您可以使用以下公式:

=DATE(YEAR(startDate),MONTH(startDate)+1,0)

其中startDate是对startDate单元格的命名引用。

答案 1 :(得分:0)

如果您真的热衷于使用自己的VBA功能,那么您可以创建一个这样的功能,它基本上会在下个月的第一天获得,并从中减去1天以获得该月的最后一天。我认为Thunderframe的答案是最好的,因为它很简单,并且使用了excel的原生功能。

Public Function dhLastDayInMonth(Optional endDate As Date = 0) As Date
    Dim dt As Date
    'check if we have a date
    If endDate = 0 Then
        ' Did the caller pass in a date? If not, use
        ' the current date.
        dt = DateTime.Now
    Else
        dt = endDate
    End If
    'check for December
    If DatePart("m", dt) = 12 Then
        'add one to the year and month
        dt = DateSerial(DatePart("yyyy", DateAdd("yyyy", 1, dt)), DatePart("m", DateAdd("m", 1, dt)), 1)
    Else
        'add 1 to the month
        dt = DateSerial(DatePart("yyyy", dt), DatePart("m", DateAdd("m", 1, dt)), 1)
    End If
    'subtract 1 day from the date to get the last date of the month
    dt = DateAdd("d", -1, dt)
    'return the end of the month
    dhLastDayInMonth = dt
End Function

答案 2 :(得分:0)

 EndDate = DateSerial(Year(Date), Month(Date) + 1, 0) 

此vba函数还将返回当前月份的每月的最后一天。如果需要其他月份,请更改Date