Access

Access открыть форму vba: Метод DoCmd.OpenForm (Access) | Microsoft Learn

Как сделать чтобы форма в access запускалась при открытии?

Содержание

  • 1 Как сделать информационное сообщение при изменении данных в базе Access
  • 2 Как это работает?
  • 3 Как это сделать?
      • 3.0.1 Шаг 1. Создание формы
      • 3.0.2 Шаг 2. Добавление кнопки «Сохранить»
      • 3.0.3 Шаг 3. Вставка VBA-кода на событие «Внесены изменения»
      • 3.0.4 Шаг 4. Создание булевой переменной
      • 3.0.5 Шаг 5. Вставка VBA-кода на событие «Нажатие кнопки»
      • 3.0.6 Шаг 6. Вставка VBA-кода на событие «До обновления»

При открытии БД Access удобно вывести на экран определенную форму, например, панель кнопок управления приложением. Сделаем так, чтобы при открытии нашей базы данных выводилась форма “Панель кнопок”.

Для этого выберем закладку Макрос, нажмем кнопку Создать, при этом появится пустое окно макроса в режиме конструктора. Нажмем на кнопку в столбце Макрокоманда, из списка выберем макрокоманду ОткрытьФорму. В окне Аргументы макрокоманды в качестве Имени формы выберем из списка, открываемого кнопкой, форму “Панель кнопок”. Закроем макрос и сохраним его с именем “AutoExec”.

Теперь закроем нашу БД и откроем ее. При этом автоматически откроется форма “Панель кнопок”. Чтобы открыть БД без автоматического открытия этой формы, надо при открытии базы данных удерживать нажатой кнопку Shift.

Теперь отменим автоматический запуск “Панели кнопок”. Для этого переименуем макрос “AutoExec” в “AutoExec1”, используя пункт меню управления БД Файл / Переименовать.

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

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

Создайте новую форму, нажав кнопку «Дизайн формы» в группе «Формы» на вкладке «Создать» ленты.

Доступ открывает форму в представлении «Дизайн».

Сохраните пустую форму, нажав кнопку «Сохранить» на панели быстрого доступа или нажав Ctrl + S.

В диалоговом окне «Сохранить как» введите имя формы и нажмите «ОК».

Вызвать форму как Главное меню. Оставьте форму открытой; вы делаете кнопки для этого позже.

Теперь вы готовы сделать макрос AutoExec, который автоматически откроет форму.

Создайте новый макрос.

Появится пустой макрос.

Добавить действие OpenForm для макроса.

Установите для параметра «Имя формы» имя только что созданной формы (Главное меню).

Чтобы сделать это, щелкните аргумент «Имя формы», щелкните стрелку вниз и выберите форму из раскрывающегося меню, которое появляется.

Закройте макрос, нажмите кнопку «Да», чтобы сохранить его, и назовите его AutoExec.

Вы должны называть свой макрос AutoExec, если вы хотите, чтобы макрос запускался автоматически при каждом открытии базы данных.

Создайте еще один макрос, нажав кнопку «Макро» в группе «Макросы и код» на вкладке «Создать» ленты.

В форме вашего основного меню требуется макрос, чтобы содержать субмакросы, которые будут запускать ваши кнопки. Вы можете сделать все свои кнопки с помощью мастера Command Buttons Wizard, который хранит субмакросы в виде встроенных макросов, но если вы хотите создать свои собственные субмакросы для своих кнопок, вы можете сохранить их в созданном вами макросе.

Нажмите кнопку «Сохранить» или нажмите Ctrl + S, чтобы сохранить новый макрос.

Введите имя макроса и нажмите «ОК».

У вас есть , чтобы дать макросу то же имя, что и форма главного меню, но вы будете менее смущены, если вы это сделаете! Если вы приняли совет на шаге 3, назовите главное меню или главное меню.

Нажмите вкладку для формы главного меню, чтобы вы могли добавлять кнопки.

Теперь вы готовы вернуться в форму вашего основного меню (тот, который вы создали на шаге 1, помните?) И добавить командные кнопки.

Форма готова и появляется при открытии базы данных; все, что ему нужно, это кнопки!

Всем привет! В этой статье я расскажу как сделать информационное сообщение при изменении данных в базе Access.

Как сделать информационное сообщение при изменении данных в базе Access

По умолчанию, когда пользователь вводит или редактирует данные с помощью формы, программа Microsoft Access автоматически сохраняет любые внесенные изменения в таблицах, так как поля формы напрямую связаны с полями соответствующей таблицы. Если пользователь закроет форму или создаст новую запись, все внесенные ранее изменения также автоматически сохраняются. Согласитесь, было бы удобно организовать работу следующим образом: пользователь открывает форму, вносит или изменяет данные. Если он закрывает форму или переходит к новой записи, система выводит информационное сообщение: «Сохранить внесенные изменения?» Если он не вносит изменения, то, соответственно, информационное сообщение не появляется. Также для удобства работы на форме можно создать кнопку «Сохранить». Данная кнопка будет неактивна при запуске самой формы. Как только будут внесены изменения, кнопка «Сохранить» становится активной.

Как это работает?

Откроем любую форму, на которой расположены кнопки «Сохранить», «Новая запись» и «Выход». Кнопка «Сохранить» не доступна.

Внесем изменение в поле «Цена» (350 вместо 250). Кнопка «Сохранить» становится доступной.

Если нажать кнопку «Сохранить», изменения сохранятся, кнопка «Сохранить» станет вновь недоступна. Если создать новую запись или выйти из формы, никаких информационных сообщений не появляется.

Поменяем теперь код бренда на «Красота от природы».

Нажмем кнопку «Выход».

Если нажать «Да», внесенные изменения сохранятся, форма закроется. Если нажать «Нет», код бренда снова станет «Кислородная линия», форма закроется.

Как это сделать?

Шаг 1. Создание формы

Для того, чтобы понять как сделать информационное сообщение при изменении данных в базе Access, необходимо создать простейшую форму. Я буду использовать форму, созданную в базе данных Косметическая продукция.

Если вы не знаете как создать формы в базе данных Access, то посмотрите видео ниже.

Шаг 2.
Добавление кнопки «Сохранить»

Переходим в конструктор форм, на панели инструментов нам понадобится инструмент «Кнопка».

Мастер создания кнопок не нужен, нажимаем кнопку «Отмена».

Щелкаем по созданной кнопке и набираем текст «Сохранить».

Далее дважды щелкаем по кнопке, чтобы открыть окно свойств. Переходим на вкладку «Данные», пункт «Доступ» — ставим «Нет».

Переходим на вкладку «Другие» и задаем имя кнопки «cmdSave»

Шаг 3. Вставка VBA-кода на событие «Внесены изменения»

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

VBA код:

Private Sub Form_Dirty(Cancel As Integer)      Me.cmdSave.Enabled = True  End Sub

При загрузке формы кнопка cmdSave недоступна (см. Шаг 2) (значение свойства Enabled равно False). Как только пользователь вносит или изменяет данные срабатывает событие формы «Внесены изменения» и кнопка cmdSave становится доступа (значение Enabled меняется на True).

Шаг 4. Создание булевой переменной

Для отслеживания статуса кнопки «Сохранить» (нажата кнопка или нет) создадим переменную Saved с помощью оператора Private. Для этого вставим строку Private Saved As Boolean под строкой Option Compare Database в самом верху экрана.

Шаг 5. Вставка VBA-кода на событие «Нажатие кнопки»

Дважды щелкаем по кнопке «Сохранить», переходим в окно свойств, вкладка «Событие», пункт «Нажатие кнопки». Нажимаем кнопку с тремя точками, выбираем пункт «Программы».

VBA код:

Private Sub cmdSave_Click()      Saved = True      DoCmd.RunCommand (acCmdSaveRecord)      Me.cmdSave.Enabled = False      Saved = False  End Sub

Если мы внесли изменения, кнопка cmdSave становится доступна (шаг 3). Когда мы нажимаем кнопку «Сохранить», булевая переменная Saved (шаг 4) получает значение True (т.е. кнопка cmdSave нажата), происходит сохранение изменений, после этого кнопка cmdSave становится снова недоступной, а переменная Saved получает значение False до тех пор пока снова не будет нажать кнопка «Сохранить».

Шаг 6. Вставка VBA-кода на событие «До обновления»

Переходим в свойства формы, вкладка «Событие», пункт «До обновления». Нажимаем кнопку с тремя точками, выбираем пункт «Программы».

VBA код:

Private Sub Form_BeforeUpdate(Cancel As Integer)  Dim Response As Integer  If Saved = False Then      Response = MsgBox("Сохранить внесенные изменения?", vbYesNo, "Сохранить изменения?")      If Response = vbNo Then         Me.Undo      End If      Me.cmdSave.Enabled = False  End If  End Sub

Событие До обновления (BeforeUpdate) возникает при любом изменении данных в записи или элементе управления. Если пользователь нажмет кнопки «Новая запись» или «Выход», не кликнув перед этим на кнопку «Сохранить», то появится информационное окно «Сохранить изменения?» (MsgBox(«Сохранить внесенные изменения?», vbYesNo, «Сохранить изменения?»)). Если пользователь нажмет «ДА», то все внесенные изменения сохраняются. Если пользователь нажмет «НЕТ», произойдет отмена всех изменений (Me. Undo). Далее кнопка cmdSave снова станет не доступна независимо от того, нажал пользователь «Да» или нажал «Нет» (Me.cmdSave.Enabled = False).

В данной статье мы разобрали как сделать информационное сообщение при изменении данных в базе Access.

Если вам нужна готовая база данных Access, то ознакомьтесь со списком представленным ЗДЕСЬ.
—————————————————
Полезные ссылки:
Урок 17: мастер запросов
Урок 16: запрос на создание таблицы
Урок 15: запросы с параметром
Урок 14: запросы с вычисляемыми полями
Урок 13: Как определить ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬ НЕДЕЛИ в запросе
Урок 12: Как создать ЗАПРОС С УСЛОВИЕМ
Урок 11: Как задать условия для ТЕКСТОВЫХ полей в запросах
Уроки по SQL-запросам

При открытии базы данных Microsoft Access могут выполняться некоторые действия. Чаще всего это открытие специальной формы, так называемой Главной кнопочной формы, вывод специальных меню или панелей инструментов, скрытие стандартных меню и т. д. Для определения этих действий используется диалоговое окно Параметры запуска (Startup). Однако иногда требуется при запуске приложения выполнить более сложный набор действий, чем тот, что позволяет задать это диалоговое окно. Например, может потребоваться заранее открыть несколько форм (не показывая их на экране), чтобы потом их отображение не занимало много времени, проверить некоторые условия или запросить ввод некоторых данных. Все это можно сделать с помощью специального макроса, который называется «AutoExec». При открытии базы данных Access проверяет наличие этого макроса и, если он существует, выполняет его. При создании макроса «AutoExec» следует помнить, что Access сначала выполнит действия, определенные в окне Параметры запуска (Startup), а затем — макрос «AutoExec», поэтому в них не должно быть противоречивых действий.

404 Cтраница не найдена

Мы используем файлы cookies для улучшения работы сайта МГТУ и большего удобства его использования. Более подробную информацию об использовании файлов cookies можно найти здесь. Продолжая пользоваться сайтом, вы подтверждаете, что были проинформированы об использовании файлов cookies сайтом ФГБОУ ВО «МГТУ» и согласны с нашими правилами обработки персональных данных.

Размер:

AAA

Изображения Вкл. Выкл.

Обычная версия сайта

К сожалению запрашиваемая страница не найдена.

Но вы можете воспользоваться поиском или картой сайта ниже

  • Университет

    Майкопский государственный технологический университет – один из ведущих вузов юга России.

    • История университета
    • Анонсы
    • Объявления
    • Медиа
      • Представителям СМИ
      • Газета «Технолог»
      • О нас пишут
    • Ректорат
    • Структура
      • Филиал
      • Политехнический колледж
      • Медицинский институт
        • Лечебный факультет
        • Педиатрический факультет
        • Фармацевтический факультет
        • Стоматологический факультет
        • Факультет послевузовского профессионального образования
      • Факультеты
      • Кафедры
    • Ученый совет
    • Дополнительное профессиональное образование
    • Бережливый вуз – МГТУ
      • Новости
      • Объявления
      • Лист проблем
      • Лист предложений (Кайдзен)
      • Реализуемые проекты
      • Архив проектов
      • Фабрика процессов
      • Рабочая группа «Бережливый вуз-МГТУ»
    • Вакансии
    • Профсоюз
    • Противодействие терроризму и экстремизму
    • Противодействие коррупции
    • WorldSkills в МГТУ
    • Научная библиотека МГТУ
    • Реквизиты и контакты
    • Управление имущественным комплексом
    • Опрос в целях выявления мнения граждан о качестве условий оказания образовательных услуг
    • Работа МГТУ в условиях предотвращения COVID-19
    • Документы, регламентирующие образовательную деятельность
    • Система менеджмента качества университета
    • Региональный центр финансовой грамотности
    • Аккредитационно-симуляционный центр
  • Абитуриентам
    • Подача документов онлайн
    • Абитуриенту 2023
    • Экран приёма 2022
    • Иностранным абитуриентам
      • Международная деятельность
      • Общие сведения
      • Кафедры
      • Новости
      • Центр международного образования
      • Академическая мобильность и международное сотрудничество
        • Академическая мобильность и фонды
        • Индивидуальная мобильность студентов и аспирантов
        • Как стать участником программ академической мобильности
    • Дни открытых дверей в МГТУ
      • День открытых дверей online
      • Университетские субботы
      • Дни открытых дверей на факультетах
    • Подготовительные курсы
      • Подготовительное отделение
      • Курсы для выпускников СПО
      • Курсы подготовки к сдаче ОГЭ и ЕГЭ
      • Онлайн-курсы для подготовки к экзаменам
      • Подготовка школьников к участию в олимпиадах
    • Малая технологическая академия
      • Профильный класс
        • Социально-экономический профиль
        • Медико-фармацевтический профиль
        • Инженерно-технологический профиль
        • Эколого-биологический профиль
        • Агротехнологический профиль
      • Индивидуальный проект
      • Кружковое движение юных технологов
      • Олимпиады, конкурсы, фестивали
    • Веб-консультации для абитуриентов и их родителей
      • Веб-консультации для абитуриентов
      • Родительский университет
    • Олимпиады для школьников
      • Отборочный этап
      • Заключительный этап
      • Итоги олимпиад
    • Профориентационная работа
    • Стоимость обучения
  • Студентам
    • Студенческая жизнь
      • Стипендии
      • Организация НИРС в МГТУ
      • Студенческое научное общество
      • Студенческие научные мероприятия
      • Конкурсы
      • Академическая мобильность и международное сотрудничество
    • Образовательные программы
    • Расписание занятий
    • Расписание звонков
    • Онлайн-сервисы
    • Социальная поддержка студентов
    • Общежития
    • Трудоустройство обучающихся и выпускников
      • Вакансии
    • Обеспеченность ПО
    • Инклюзивное образование
      • Условия обучения лиц с ограниченными возможностями
      • Доступная среда
    • Ассоциация выпускников МГТУ
    • Перевод из другого вуза
    • Вакантные места для перевода
    • Студенческое пространство
      • Студенческое пространство
      • Запись на мероприятия
    • Отдел по социально-бытовой и воспитательной работе
  • Наука и инновации
    • Научная инфраструктура
      • Проректор по научной работе и инновационному развитию
      • Научно-технический совет
      • Управление научной деятельностью
      • Управление аспирантуры и докторантуры
      • Точка кипения МГТУ
        • О Точке кипения МГТУ
        • Руководитель и сотрудники
        • Документы
        • Контакты
      • Центр коллективного пользования
      • Центр народной дипломатии и межкультурных коммуникаций
      • Студенческое научное общество
    • Новости
    • Научные издания
      • Научный журнал «Новые технологии»
      • Научный журнал «Вестник МГТУ»
      • Научный журнал «Актуальные вопросы науки и образования»
    • Публикационная активность
    • Конкурсы, гранты
    • Научные направления и результаты научно-исследовательской деятельности
      • Основные научные направления университета
      • Отчет о научно-исследовательской деятельности в университете
      • Результативность научных исследований и разработок МГТУ
      • Финансируемые научно-исследовательские работы
      • Объекты интеллектуальной собственности МГТУ
      • Результативность научной деятельности организаций, подведомственных Минобрнауки России (Анкеты по референтным группам)
    • Студенческое научное общество
    • Инновационная инфраструктура
      • Федеральная инновационная площадка
      • Проблемные научно-исследовательские лаборатории
        • Научно-исследовательская лаборатория «Совершенствование системы управления региональной экономикой»
        • Научно-исследовательская лаборатория проблем развития региональной экономики
        • Научно-исследовательская лаборатория организации и технологии защиты информации
        • Научно-исследовательская лаборатория функциональной диагностики (НИЛФД) лечебного факультета медицинского института ФГБОУ ВПО «МГТУ»
        • Научно-исследовательская лаборатория «Инновационных проектов и нанотехнологий»
      • Научно-техническая и опытно-экспериментальная база
      • Центр коллективного пользования
      • Научная библиотека
    • Экспортный контроль
    • Локальный этический комитет
    • Конференции
      • Международная научно-практическая конференция фундаментальные и прикладные аспекты геологии, геофизики и геоэкологии с использованием современных информационных технологий
      • Международная научно-практическая конференция «Актуальные вопросы науки и образования»
      • VI Международная научно-практическая онлайн-конференция
    • Наука и университеты
  • Международная деятельность
    • Иностранным студентам
    • Международные партнеры
    • Академические обмены, иностранные преподаватели
      • Академическая мобильность и фонды
      • Индивидуальная мобильность студентов и аспирантов
    • Факультет международного образования
      • Новости факультета
      • Информация о факультете
      • Международная деятельность
      • Кафедры
        • Кафедра русского языка как иностранного
        • Кафедра иностранных языков
      • Центр Международного образования
      • Центр обучения русскому языку иностранных граждан
        • Приказы и распоряжения
        • Курсы русского языка
        • Расписание
      • Академическая мобильность
      • Контактная информация
    • Контактная информация факультета международного образования
  • Сведения об образовательной организации
    • Основные сведения
    • Структура и органы управления образовательной организацией
    • Документы
    • Образование
    • Образовательные стандарты и требования
    • Руководство. Педагогический (научно-педагогический) состав
    • Материально-техническое обеспечение и оснащённость образовательного процесса
    • Стипендии и меры поддержки обучающихся
    • Платные образовательные услуги
    • Финансово-хозяйственная деятельность
    • Вакантные места для приёма (перевода)
    • Международное сотрудничество
    • Доступная среда
    • Организация питания в образовательной организации

Ссылки Microsoft Access VBA на формы и элементы управления

Модули — это место, где ссылки на объекты становятся действительно мощными. У тебя есть больше гибкость, чем в любой другой части Access. Когда вы обнаружите, что вы не можете делать то, что хотите в макросе, переход к модулям VBA откроет совершенно новый мир дизайна.

В модулях Access вы можете ссылаться на формы и элементы управления, используя прямые ссылки, как обсуждалось выше или с помощью объектных переменных. Чтобы обратиться к объекту напрямую, просто следуйте тем же правилам, что и для макроса. Следующее функция отображает диалоговое окно, если элемент управления ctlOrderAmount содержит сумма больше 5000.

Функция TestAmount()
  Если Forms("frmCustomer").ctlOrderAmount > 5000 Тогда
    MsgBox "Заказы на сумму более 5000 долларов должны быть подтверждены!"
  Конец, если
End Function 

Вы также можете присвоить значение элементу управления. Эта функция помещает значение 12,50 в элемент управления ctlOrderAmount текущей активной формы:

Функция УстановитьКоличество()
  Screen.ActiveForm.ctlOrderAmount = 12,50
End Function 

Объектные переменные

Хотя прямая ссылка работает, лучше всего использовать объектные переменные для ссылки на формы и элементы управления. Используя объектные переменные, вы назначаете ссылку на формировать или контролировать только один раз. Это может уменьшить количество ошибок при вводе. Вы также можете присваивайте своим объектам более короткие имена, что упрощает написание кода и поддерживать. Наконец, использование объектных переменных заставляет вашу программу работать Быстрее. Если первые две причины вас не убедили, то эта должна.

Объектная переменная отличается от обычной (числовой, строковой и т. д.) переменной тем, что она содержит ссылку на объект, а не на сам объект. Это важная концепция: если вы создаете несколько объектных переменных и назначаете их к одному объекту, все переменные относятся к одному и тому же объекту, они не являются несколькими копиями объекта.

VBA предоставляет два типа объектных переменных, которые полезны при обращении к формам и контролирует. Тип переменной Form используется для ссылки на форму. Контроль Тип переменной используется для ссылки на элемент управления в форме. Есть два шаги, необходимые для использования объектных переменных. Сначала вы объявляете объект переменная с помощью оператора DIM. Это создает объектную переменную, который еще не относится к какому-либо конкретному объекту. Затем вы указываете переменная к определенному объекту с помощью оператора SET. Вы должны использовать оба этих операторов до того, как объектная переменная будет ссылаться на объект.

Следующий пример эквивалентен предыдущей функции, которая отображает диалоговое окно, но использует переменные объекта.

Функция TestAmount()
  Dim frmCust as Form
  Dim ctlAmount как элемент управления

  Установить frmCust = Формы("frmCustomer")
  Установите ctlAmount = frmCust.ctlAmount
  Если ctlAmount > 5000 Тогда
    MsgBox "Заказы на сумму более 5000 долларов должны быть подтверждены!"
  Конец, если
End Function 

В этом примере вторая и третья строки используют оператор Dim для объявления объектных переменных. типов Form и Control. Эти переменные будут содержать ссылки на Форма и контроль. Следующие две строки присваивают реальным объектам объектные переменные. Обратите внимание, что когда мы устанавливаем управляющую переменную, мы указываем в объектную переменную frmCust вместо прямой ссылки на Формирует системный объект. Для остальной части функции, когда вы хотите обратитесь к элементу управления ctlAmount, используйте переменную ctlAmont.

Вы можете ссылаться на подчиненные формы почти таким же образом. Следующая функция устанавливает значение элемента управления ctlStateTax в подформе subfrmOrders формы frmCustomer на 100.

Функция SetStateTax()
  Dim frmCust as Form
  Dim subfrmOrders как элемент управления
  Dim ctlStateTax как элемент управления
  
  Установить frmCust = Формы("frmCustomer")
  Установите subfrmOrders = Forms("frmCustomer").subfrmOrders
  Установить ctlStateTax = subfrmOrders.Form!ctlStateTax
  ctlStateTax = 100
Завершить функцию 

Ссылка на свойства с помощью переменных объекта стандартное точечное обозначение.

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

Следующая функция открывает форму Orders и делает поля StateTax и FederalTax невидимыми:

Функция SetOrderForm()
  Dim frmOrders как форма
  Dim ctlStateTax
  Dim ctlFedTax как элемент управления
  
  DoCmd.OpenForm "Заказы"
  Установить frmOrders = Формы("Заказы")
  Установить ctlStateTax = frmOrders.ctlStateTax
  Установить ctlFedTax = frmOrders.ctlFederalTax
  ctlStateTax.Visible = Ложь
  ctlFedTax.Visible = Ложь
Завершить функцию 

MS Access VBA — определение того, открыта ли форма

Следующая простая небольшая процедура может использоваться для проверки того, открыта ли уже данная форма.

 '----------------------------------------------------------------------------- ----------------------------------------
'Процедура: IsFrmOpen
' Автор : CARDA Consultants Inc. 
Веб-сайт: http://www.cardaconsultants.com
' Цель: Определить, открыта форма или нет
' Авторские права: Нижеследующее является выпуском как Attribution-ShareAlike 4.0 International.
' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
'
' Входные переменные:
' ~~~~~~~~~~~~~~~~~
' sFrmName : Имя формы для проверки, открыта она или нет
'
' Пример использования:
' ~~~~~~~~~~~~~~~~~
' ИсфрмОткрыть("Форма1")
'
' Лист регистраций изменений:
' Дата выпуска (гггг/мм/дд) Описание
'*************************************************** ****************************************
' 1 26 мая 2010 г. Первоначальный выпуск
' 2 10 февраля 2018 г. Незначительное упрощение кода (Сорен М. Петерсен)
' Обновлена ​​обработка ошибок
' Обновлено авторское право
-------------------------------------------------- --------------------------------------
Функция IsFrmOpen (sFrmName как строка) как логическое значение
    При ошибке Перейти к Error_Handler
    IsFrmOpen =Application.CurrentProject.AllForms(sFrmName). IsLoaded
Ошибка_Handler_Exit:
    При ошибке Возобновить Далее
    Выход из функции
Error_Handler:
    MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _
           "Номер ошибки: " & Err.Number & vbCrLf & _
           "Источник ошибки: IsFrmOpen" & vbCrLf & _
           "Описание ошибки: " & Err.Description & _
           Switch(Erl = 0, "", Erl 0, vbCrLf & "Номер строки: " & Erl) _
           , vbOKOnly + vbCritical, "Произошла ошибка!"
    Возобновить Error_Handler_Exit
Завершить функцию 

Как использовать

Ниже приведена очень простая процедура, которая проверяет, открыта ли в данный момент форма frm_Contacts, и если да, то мы запрашиваем ее. Этот тип кода будет использоваться, если вы используете всплывающую форму для добавления новых записей, редактирования данных, чтобы убедиться, что другая форма отражает эти изменения.

 Если IsFrmOpen("frm_Contacts") = Истина Тогда
    Формы(frm_Contacts).Form.Requery
End If 

Проблема с вышеизложенным заключается в том, что свойство . IsLoaded не может отличить форму, открытую в режиме разработки, от обычных режимов визуализации (представление формы, представление таблицы, представление макета и т. д.), поэтому оно может быть неточным в зависимости от требуемое использование. Все свойство .IsLoaded проверяет, загружена ли форма, а не в каком режиме просмотра она работает. Таким образом, я предпочитаю использовать функцию, подобную приведенной ниже, которая возвращает True только тогда, когда объект открыт для визуализации, а не для дизайна. Кроме того, следующее более универсально, поскольку оно может обрабатывать как формы, запросы, отчеты, так и таблицы.

 '----------------------------------------------------------------------------- ----------------------------------------
' Процедура: IsObjectOpen
Автор: Даниэль Пино, CARDA Consultants Inc.
Веб-сайт: http://www.cardaconsultants.com
' Цель: проверить, открыт ли объект (форма или отчет) или нет
' .IsLoaded ненадежен, так как он не может отличить дизайн!
' Авторские права: Нижеследующее является выпуском как Attribution-ShareAlike 4. 0 International.
' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Требуемые ссылки: не требуется
'
' Входные переменные:
' ~~~~~~~~~~~~~~~~~
' sObjectName : Имя объекта (форма, запрос, отчет или таблица) для проверки и просмотра
'если он открыт
' lObjectType : Тип объекта: acForm -> Формы
'acQuery -> Запросы
'acReport -> Отчеты
'acTable -> Таблицы
'
' Использование:
' ~~~~~~
' ?IsObjectOpen("Form1", acForm)
' ?IsObjectOpen("Query1", acQuery)
' ?IsObjectOpen("Отчет1", acReport)
' ?IsObjectOpen("Таблица1", acTable)
'
' Лист регистраций изменений:
' Дата выпуска (гггг/мм/дд) Описание
'*************************************************** ****************************************
' 1 26 мая 2010 г. Первоначальный выпуск
' 2 06.10.2018 Обновлены авторские права и обработка ошибок
-------------------------------------------------- --------------------------------------
Публичная функция IsObjectOpen (ByVal sObjectName As String, _
 lObjectType как acObjectType) как логическое значение
 При ошибке Перейти к Error_Handler
 '0=Закрыто, 1=Открыто, 2=Открыто и грязно, 3=Открыто на новой записи
 Если SysCmd(acSysCmdGetObjectState, lObjectType, sObjectName) 0 Тогда
 Выберите Case lObjectType
 Дело acForm
 '0 = представление «Дизайн», 1 = представление формы, 2 = представление таблицы, 7 = представление макета
 Если Формы(sObjectName). CurrentView 0 Тогда
 ИсОбъектОткрыть = Истина
 Конец, если
 Кейс AcQuery
 Если CurrentData.AllQueries(sObjectName).CurrentView 0 Тогда
 ИсОбъектОткрыть = Истина
 Конец, если
 Дело acReport
 '0 = Представление «Дизайн», 5 = Предварительный просмотр перед печатью, 6 = Представление отчета, 7 = Представление макета
 Если Отчеты(sObjectName).CurrentView 0 Тогда
 ИсОбъектОткрыть = Истина
 Конец, если
 Case acTable
 Если CurrentData.AllTables(sObjectName).CurrentView 0 Тогда
 ИсОбъектОткрыть = Истина
 Конец, если
 Конец выбора
 Конец, если
Ошибка_Handler_Exit:
 При ошибке Возобновить Далее
 Выход из функции
Error_Handler:
 MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _
 "Номер ошибки: " & Err.Number & vbCrLf & _
 "Источник ошибки: IsObjectOpen" & vbCrLf & _
 "Описание ошибки: " & Err.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *