MS Access VBA на Dateadd на текущий день - PullRequest
0 голосов
/ 12 июня 2019

У меня вопрос по поводу оператора dateadd, который я использую. Идея состоит в том, что форма выскакивает с днем ​​недели, и вы можете выбрать его, чтобы добавить срок оплаты. IE: вы выбираете Понедельник, и если это понедельник, тогда вам будет назначен понедельник, но если это вторник, то следующий день будет использоваться в качестве даты.

Проблема в том, что, если сегодня понедельник, и вы выбираете понедельник, он дает следующий понедельник в качестве срока оплаты, а не текущий день.

Вот заявление, которое я использую ...

 DateAdd('d',8-Weekday(Date(),4),Date())

Я не уверен, как сделать это исправление, так как оно мне кажется правильным. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Это также должно работать:

DateAdd('d',(8-Weekday(Date(),4)) mod 7,Date())

1 голос
/ 12 июня 2019

Это похоже на работу.

thisday = date()

dateadd("d",7-weekday(thisday, vbTuesday), thisday)
0 голосов
/ 12 июня 2019

Если вам не нужно использовать решение на 1 строку, тогда небольшая функция будет весьма полезна. Он проверяет текущий день с помощью Weekday() и, если это vbMonday, возвращает его. Если нет, то выдает следующий понедельник.

Public Function NextMonday(selectedDate As Date) As Date

    Dim returnMonday As Date

    If Weekday(selectedDate) = vbMonday Then
        NextMonday = selectedDate
    Else
        NextMonday = selectedDate + 8 - Weekday(selectedDate, vbMonday)
    End If

End Function

И это работает:

Sub TestMe()

    'Monday:
    Debug.Print NextMonday(DateSerial(2019, 6, 10))
    Debug.Print NextMonday(DateSerial(2019, 6, 17))

    'Not Monday:
    Debug.Print NextMonday(DateSerial(2019, 6, 7))
    Debug.Print NextMonday(DateSerial(2019, 6, 11))

End Sub
...