2015-10-13 6 views
1

Мне нужна ваша помощь. Я хочу получить последний день месяца. Ну, это мой код, но если я хочу его отладить и скомпилировать в базу данных, он говорит, что в синтаксисе есть ошибка. Пожалуйста, помогите =)VBA - Access - Получить последний день месяца

Public Function GetNowLast() As Date 
Dim asdfh As Date 
asdfh = DateValue("1." _ 
& IIf(Month(Date) + 1) > 12, Month(Date) + 1 - 12, Month(Date) + 1) _ 
&"."&IIf(Month(Date)+1)>12 , Year(Date)+1,Year(Date)) 
asdf = DateAdd("d", -1, asdf) 
GetNowLast = asdf 
End Function 
+2

Посмотрите [здесь] (https://msdn.microsoft.com/en-us/library/aa227522 (v = vs.60) .aspx). Он дает функции делать то, что вы хотите. –

+0

Я получил синтаксис, но во второй строке он говорит, что мой аргумент не является необязательным – linuxman

+1

в основном для того, что вы хотите, вам нужна только одна строка в вашей функции: 'GetNowLast = Format (DateSerial (Год (Дата), Месяц (Дата) + 1 , 0), «d»). Это даст вам ответ 31 за этот месяц, а затем, когда мы войдем в ноябре, он даст 30 и так далее. –

ответ

1

GD Linuxman,

Давайте сосредоточимся на получение результата ... :-)

Смотрите также: here

Комментарий по @Scott Крейнером является пятно на! Хотя строго говоря, нет необходимости использовать форматирование. (Предположим, что вы хотите работать с «Date» объекта)

Чтобы достичь того, чего вы хотите, настройки функции согласно ниже:

Function GetNowLast() as Date 

    dYear = Year(Now) 
    dMonth = Month(Now) 

    getDate = DateSerial(dYear, dMonth + 1, 0) 

    GetNowLast = getDate 

End Function 

Вы можете вызвать функцию в вашем коде как:

Sub findLastDayOfMonth() 

    lastDay = GetNowLast() 

End Sub 

в качестве альтернативы, и аккуратнее, скорее всего:

Function GetNowLast(inputDate as Date) as Date 

    dYear = Year(inputDate) 
    dMonth = Month(inputDate) 

    getDate = DateSerial(dYear, dMonth + 1, 0) 

    GetNowLast = getDate 

End Function 

Вы можете вызвать эту функцию и передать его в входной параметр.

Sub findLastDayOfMonth() 

lastDay = GetNowLast(Now()) 'Or any other date you would like to know the last day of the month of. 

End Sub 

Смотрите также this аккуратным раствора @KekuSemau

0
Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Dim d1 As String 

    Set Rng = Range("A2") 
    d1 = Range("a2").Value2 'put a date in A2 Formatted as date(cell format) 

    Dim years 
    Dim months 
    Dim end_month 
    years = year(d1) 
    months = month(d1) 

    end_month = Day(DateSerial(years, months + 1, 1 - 1)) 'add one month and subtract one day from the first day of that month 

    MsgBox CStr(end_month), vbOKOnly, "Last day of the month" 


End Sub 
+0

Вы должны добавить некоторое объяснение, как ваш код решает проблему, указанную в вопросе. – moggi

0

Я понимаю, что это немного поздно в разговор, но есть уже доступна функция рабочего листа, который дает конец дня месяца, 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 

Я надеюсь, что кто-то помогает.

Смежные вопросы