Я понимаю, что это немного поздно в разговор, но есть уже доступна функция рабочего листа, который дает конец дня месяца, EOMONTH().
Оклейка в окне Immediate:
?Format(CDate(WorksheetFunction.EoMonth(Date, 0)), "dd")
Вернется в последний день месяца на основе текущей даты.
Как UDF, то имеет смысл дать ему аргумент по умолчанию:
Function LastDay(Optional DateUsed As Date) As String
If DateUsed = Null Then DateUsed = Date
LastDay = Format(CDate(WorksheetFunction.EoMonth(DateUsed, 0)), "dd")
Debug.Print LastDay
End Function
Если вы кормите его аргументы, убедитесь, что они Дата литералы (т.е. Заключено с #s)
LastDay(#3/10#)
Result: 31
LastDay #2/11/2012#
Result: 29 '(A leap Year)
Примечание Тип вывода данных Строка (не Дата) и что формат даты может быть скорректирован по мере необходимости (Пример: «мм/дд/гггг» вместо «дд»).
Если Дата Тип данных требуется, используйте:
Function LastDay(Optional DateUsed As Date) As Date
If DateUsed = 0 Then DateUsed = Date
LastDay = WorksheetFunction.EoMonth(DateUsed, 0)
Debug.Print CDate(LastDay)
End Function
Я надеюсь, что кто-то помогает.
Посмотрите [здесь] (https://msdn.microsoft.com/en-us/library/aa227522 (v = vs.60) .aspx). Он дает функции делать то, что вы хотите. –
Я получил синтаксис, но во второй строке он говорит, что мой аргумент не является необязательным – linuxman
в основном для того, что вы хотите, вам нужна только одна строка в вашей функции: 'GetNowLast = Format (DateSerial (Год (Дата), Месяц (Дата) + 1 , 0), «d»). Это даст вам ответ 31 за этот месяц, а затем, когда мы войдем в ноябре, он даст 30 и так далее. –