Итак, у меня есть 6 запросов, и я хочу запускать их все один раз в конце каждого месяца. (Я немного знаю о SQL, но они просто созданы с использованием представления конструктора Access). Поэтому в ближайшие несколько дней, возможно, я запущу 6 запросов для мая, так как май только что закончился. Мне нужны только данные за месяц, который только что закончился, поэтому в запросе Критерии установлены как название месяца (например, Май). Теперь, это не так уж и много времени, чтобы менять все это каждый месяц, но есть ли способ автоматизировать это? В настоящее время они все установлены на Апрель, и я хочу изменить их все на Май, когда я запущу их через несколько дней. И каждый месяц я хотел бы вводить месяц (возможно, в текстовом поле в форме или где-то еще, если вы знаете лучший способ) только один раз и изменять все 6 запросов, без необходимости вручную открывать все 6, прокручивать до правого поля и изменять Критерии.
Примечание (о VBA): Я использовал Excel VBA, поэтому я знаю основы VBA, но я не знаю ничего конкретного об Access (кроме того, что видел код несколько раз). И другие будут использовать это, кто ничего не знает об Access VBA. Так что, я думаю, я нашел похожеевопрос ответэто можно сделать в VBA, но я бы предпочел сделать это как-то по-другому. Если запрос нужно будет немного переделать позже, возможно, кем-то, кто вообще не знает Access VBA, было бы неплохо иметь решение, не включающее VBA, если это вообще возможно.
решение1
Есть простой способ сделать так, чтобы запрос запрашивал месяц при его запуске: в запросе введите [Введите месяц] в том же месте, где сейчас находится название месяца.
При запуске запроса появится диалоговое окно для ввода месяца. Вы можете поместить любой текст в квадратные скобки — не обязательно «месяц»; это просто определяет, что будет написано в диалоговом окне. Этот метод называется «параметрический запрос».
Выполнение всех 6 запросов за один шаг потребует кода VBA, но очень простого кода. Вашим конечным пользователям не нужно ничего знать о VBA, им нужно только открыть форму и нажать кнопку.
Создайте форму, поместите на нее одну кнопку. В списке свойств этой кнопки выберите вкладку События, а затем событие "On Click". Нажмите кнопку "..." для события On Click.
Это открывает окно кода VBA с курсором в правильном месте - Private Sub Command0_Click - где Command0 - это имя кнопки. Введите код, как показано...
Замените правильные имена для ваших запросов и повторите строку кода столько раз, сколько необходимо. Открытие формы и нажатие кнопки теперь запустит все запросы одновременно.
Следующий шаг
Последним усовершенствованием было бы ввести параметр один раз и применить его ко всем запросам автоматически. Это требует нескольких шагов.
В окне кода VBA создайте код "Модуль". Щелкните правой кнопкой мыши на панели проекта окна и выберите Вставить/Модуль:
В новом модуле добавьте этот код:
gstrMonth — это глобальная переменная string для хранения названия месяца. Функция GetMonth будет использоваться в запросах для получения этого значения.
Теперь измените код Form1 на следующий:
Подпрограмма "AskForMonth" отображает диалоговое окно, в котором пользователь может ввести название месяца. Этот ввод присваивается переменной gstrMonth.
В коде Command0 (кнопка) мы добавляем AskForMonth перед выполнением запроса. Снова повторите строку "DoCmd" для каждого запроса с правильными именами запросов.
Последний шаг — заменить параметр в запросах на вызов функции «GetMonth». Вместо [Enter Month] в критериях запроса поставьте «GetMonth()».
Надеюсь, это вдохновит вас использовать некоторые возможности VBA для автоматизации задач Access!