1

Итак, у меня есть 6 запросов, и я хочу выполнить их все один раз в конце каждого месяца. (Я немного знаю о SQL, но они просто построены с использованием представления дизайна Access). Итак, в ближайшие несколько дней, возможно, я выполню 6 запросов за май, поскольку май только что закончился. Я хочу получить данные только за месяц, который только что закончился, поэтому в запросе в качестве имени месяца указываются критерии (например, май). Теперь не так уж много времени, чтобы менять все это каждый месяц, но есть ли способ автоматизировать это? В настоящее время они настроены на апрель, и я хочу изменить их на май, когда я проведу их через несколько дней. И каждый месяц я хотел бы набрать месяц (возможно, в текстовом поле в форме или где-то еще, если вы знаете лучший способ) только один раз, и он должен изменить все 6 запросов, без необходимости вручную открывать все 6, пролистать в правильное поле и измените критерии.

Примечание (о VBA): я использовал Excel VBA, поэтому я знаю основы VBA, но на самом деле я не знаю ничего специфического для Access (кроме просмотра кода несколько раз). И другие будут использовать это, кто ничего не знает о Access VBA. Итак, я думаю, что нашел похожий вопрос / ответ, который мог бы сделать это в VBA, но я бы предпочел сделать это другим способом. Если запрос должен быть немного переработан позже, возможно, кем-то, кто вообще не знает Access VBA, было бы неплохо иметь решение, не включающее VBA, если это вообще возможно.

1 ответ1

2

Существует простой способ заставить запрос запрашивать месяц при его запуске: в запросе поместите [Enter Month] в то же место, где у вас теперь есть название месяца.

Когда запрос выполняется, появится диалоговое окно для ввода месяца. Вы можете поместить любой текст в квадратные скобки - он не должен говорить "месяц"; это просто определяет, что скажет диалоговое окно. Этот метод называется "запросом параметров".

Выполнение всех 6 запросов за один шаг потребует кода VBA - но очень простой код. Ваши конечные пользователи не должны ничего знать о VBA - им нужно всего лишь открыть форму и нажать кнопку.

Создайте форму, поместите одну кнопку на нее. В списке свойств этой кнопки выберите вкладку "События", а затем событие "При нажатии". Нажмите кнопку «...» для события On Click.

Откроется окно кода VBA с курсором в правильном месте - Private Sub Command0_Click - где Command0 - это имя кнопки. Введите код, как показано ...

Подставьте правильные имена для ваших запросов и повторите строку кода столько раз, сколько необходимо. После открытия формы и нажатия кнопки все запросы будут выполняться одновременно.

Следующий шаг

Финальным улучшением будет ввод параметра один раз и автоматическое применение его ко всем запросам. Это требует нескольких шагов.

В окне кода VBA создайте код "Модуль". Щелкните правой кнопкой мыши на панели проекта окна и выберите «Вставить / Модуль»:

В новом модуле добавьте этот код:

gstrMonth - это строка глобальной переменной, которая содержит название месяца. Функция GetMonth будет использоваться в запросах для получения этого значения.

Теперь измените код Form1 на это:

В подпункте "AskForMonth" отображается диалоговое окно, в котором пользователь может ввести название месяца. Этот вход присваивается переменной gstrMonth.

В коде Command0 (кнопка) мы добавляем AskForMonth перед выполнением запроса. Снова, повторите строку "DoCmd" для каждого запроса с правильными именами запроса.

Последний шаг - заменить параметр в запросах вызовом функции "GetMonth". Вместо [Введите месяц] в критериях запроса поставьте «GetMonth ()».

Я надеюсь, что это побудит вас использовать некоторые возможности VBA для автоматизации ваших задач доступа!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .