#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))