Дата автоматического обновления мод MS Access VBA?

#vba #ms-access

Вопрос:

В Excel, если я хочу, чтобы ячейка автоматически указывала дату, я использую вариант следующего кода:

 TODAY()   MOD(DATE(2021,1,1) - TODAY(),90) - 90
 

Эта строка будет автоматически обновляться каждые 90 дней, все, что мне нужно сделать, это преобразовать ее в функцию VBA, которая будет частью функции onload в заданной форме. Я пытался

 DATE()   (2 / 4 / 2021 - DATE()) Mod 90 - 90
 

Что, очевидно, не работает. Есть какие-нибудь идеи о том, как это сделать? Результат этого необходимо использовать в инструкции SQL Where. Теперь я мог бы просто жестко закодировать даты, так как это обновляется каждый квартал, а затем запустить сложное утверждение if, но это кажется неправильным способом сделать это.

Отредактировано: Мне сообщили, что я недостаточно ясно выразился, и я перечитал это, и я думаю, что это не так.

Мне нужно, чтобы это была переменная в VBA, чтобы сравнить дату запуска приложения с датой, хранящейся в 4 разных таблицах.

Идея заключается в том, что через 90 дней после установленной даты на интерфейсе есть функция поиска, которая должна извлекать информацию из запрошенных таблиц по запросу пользователей.

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

Мое альтернативное решение состоит в том, чтобы использовать 4 переменные для установки месяцев, а затем выполнить проверку текущей даты для каждой из них, оттянув месяц от текущей даты, а затем изменив эту информацию обратно на дату и используя новую дату…

пример неоптимального кода:

 if Month(Date) > 10 Then
   varYear = Year(Date)
   strDate = "10/1/" amp; CStr(varYear)
   useDate = DateValue(strDate)
 

Такое ощущение, что я иду по длинному пути, вместо того, чтобы просто использовать 90-дневный мод на определенную дату по сравнению с текущей датой, как это делает формула электронной таблицы Excel.

Комментарии:

1. Which obviously doesn't work. — это совсем не информативно. Вы пытаетесь создать вычисляемый столбец? См. раздел: Объединение полей с использованием вычисляемого типа данных и здесь: Вычислите четверть даты в вычисляемом поле в таблице доступа

2. Да, на самом деле это фактически то, что у меня работает, выглядит как «useDate = значение даты(«10/1» и CStr(Год(дата))) немного громоздко, но до 8 строк кода, учитывая, что каждый квартал требует ежемесячной проверки. Просто было бы неплохо свести все к одной строке кода.

Ответ №1:

Я предполагаю (?), что это может быть так:

 DateAdd("q", DateDiff("q", DateSerial(2021, 1, 1), Date()), DateSerial(2021, 1, 1))
 

или:

 DateAdd("q", 1   DateDiff("q", DateSerial(2021, 1, 1), Date()), DateSerial(2021, 1, 1))