Найти в Дзене
VBA Excel с нуля

VBA Excel № 179. Создаём всплывающую форму календаря в Excel при двойном щелчке на ячейке

Иногда в Excel требуется быстро выбрать дату, и для этого можно создать всплывающую форму календаря, которая появится при двойном щелчке на ячейке. В этой статье мы рассмотрим, как создать такую форму, используя VBA. Анонс статьи, файл-пример и короткое видео было было опубликовано ранее, на моём телеграмм канале. Когда и зачем использовать всплывающую форму календаря в Excel? Такая форма календаря в Excel иногда полезна в ситуациях, когда пользователю нужно вводить даты в таблицу регулярно или, когда необходимо уменьшить вероятность ошибок при вводе. Например: 📌 Скачать файл пример, можно в конце статьи. В этой части создадим форму и настроим элементы управления. Основная идея состоит в том, чтобы создать кнопки для выбора дня, а также поля для выбора месяца и года. Создадим форму и определим ее модальность. Дадим наименование элементам управления: Процедуры расположенные в модуле формы: Начнем с создания макроса, который активирует форму при двойном щелчке на любой ячейке в диапазо
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Иногда в Excel требуется быстро выбрать дату, и для этого можно создать всплывающую форму календаря, которая появится при двойном щелчке на ячейке. В этой статье мы рассмотрим, как создать такую форму, используя VBA.

Анонс статьи, файл-пример и короткое видео было было опубликовано ранее, на моём телеграмм канале.

Когда и зачем использовать всплывающую форму календаря в Excel?

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

  • Учет времени и даты в отчетах: Если таблица предназначена для ведения учета посещаемости, учета рабочего времени или планирования, форма календаря ускоряет процесс выбора даты.
  • Планирование событий: В таблицах с графиками или планами мероприятий использование календаря позволяет пользователю относительно быстро выбирать даты и избегать ручного ввода.
  • Ввод данных в базу: В ситуациях, когда таблица выступает в роли интерфейса для ввода данных в базу (например, список клиентов, регистрация заказов), календарь может быть отличным инструментом для оптимизации работы.
  • Согласование с форматами: Если требуется строгое соответствие формату даты, всплывающая форма календаря помогает избежать ошибок ввода.

Преимущества:

  1. Удобство для пользователей: Пользователь может выбирать даты нажатием кнопок, вместо ввода вручную. Это исключает проблемы с ошибочным вводом или нарушением форматов.
  2. Снижение ошибок: Макрос автоматически устанавливает ограничения на ввод недействительных дат (например, отсутствие 31-го дня в феврале переводит дату на 2 марта), что минимизирует человеческие ошибки.
  3. Универсальность: Форма может изменяется под разные потребности. Можно расширить ее функциональность, например, добавив выбор времени или другие элементы.
  4. Автоматизация процессов: Пользовательская форма может быть вызвана автоматически при определенных действиях, что делает работу с Excel более эффективной и экономит время.

Недостатки:

  1. Необходимость знаний VBA: Чтобы создать такую форму, необходимо базовое знание VBA и понимание событий в Excel.
  2. Ограниченность гибкости: Создание формы требует предопределенных границ, таких как диапазоны и параметры. Пользователю придется самостоятельно вносить изменения в код, если потребуются дополнительные функции.
  3. Совместимость: В некоторых случаях макросы могут быть заблокированы политиками безопасности организации, что ограничивает использование формы. Также возможно, что у пользователя может быть отключен доступ к макросам в Excel.

📌 Скачать файл пример, можно в конце статьи.

Часть 1: Настройка формы календаря

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

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Дадим наименование элементам управления:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Процедуры расположенные в модуле формы:

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Пояснение:

  1. Создание кнопок для выбора дня: В цикле For создаются кнопки с подписями от 1 до 31. Каждая кнопка размещается в сетке и автоматически выбирает текущий день.
  2. Заполнение списков для месяцев и годов: Используются элементы ListBox и ComboBox для выбора месяца и года. Предустанавливаются текущие значения.
  3. Кнопка "OK": Проверяется, выбраны ли день, месяц и год. Если всё корректно, дата записывается в активную ячейку.
  4. Кнопка "Cancel": Закрывает форму без внесения изменений.

Часть 2: Реализация макроса для двойного щелчка на ячейке

Начнем с создания макроса, который активирует форму при двойном щелчке на любой ячейке в диапазоне столбца от «Н» (вы можете выбрать любой другой столбец или даже диапазон столбцов, например, от «A» до «K»).

Код в модуле листа:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Пояснение:

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

  1. Target — это ячейка, по которой произошел двойной щелчок.
  2. Intersect проверяет, находится ли целевая ячейка в диапазоне в столбце «H» (или, например, в диапазоне от столбца «A» до «K»).
  3. Если условие выполняется, то стандартное действие двойного щелчка отменяется, и вызывается метод Show для отображения формы.

Вот короткое видео на эту тему:

СКАЧАТЬ ФАЙЛ ПРИМЕР