Найти тему
VBA Excel с нуля

VBA Excel № 160 Как выбрать диапазон в пользовательской форме

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

Во многих встроенных диалоговых окнах Excel пользователи могут выбирать диапазоны ячеек. Например, в диалоговом окне "Подбор параметра" (его можно найти через Данные → Работа с данными → Анализ "что если" → Подбор параметра), пользователю можно указать две отдельные ячейки. Это можно сделать либо, введя имена диапазонов вручную, либо выделив их с помощью мыши.

Пользовательские диалоговые окна Excel также могут предоставлять такие возможности с помощью элемента управления RefEdit.

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

Хотя он выглядит иначе, чем стандартные элементы выбора диапазона, работает он точно так же. Когда пользователь щёлкает на кнопке справа от элемента управления RefEdit, диалоговое окно временно исчезает, и появляется указатель выбора диапазона. Это очень похоже на поведение встроенных диалоговых окон Excel.

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Однако стоит отметить, что элемент RefEdit не поддерживает специальные клавиши для выделения диапазона (например, нельзя использовать клавишу <End> и комбинацию <Shift+стрелка>). Также после нажатия на маленькую кнопку справа от элемента RefEdit диапазон можно выделять только с помощью мыши, клавиатуру при этом использовать нельзя.

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

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

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

Ниже приведены полезные советы по использованию элемента RefEdit.

  • Получение диапазона: Элемент RefEdit возвращает текстовую строку, представляющую выбранный диапазон. Чтобы преобразовать эту строку в объект Range, используйте следующий оператор:
Скриншот с моего ноутбука
Скриншот с моего ноутбука
  • Инициализация элемента: Рекомендуется инициализировать элемент RefEdit для отображения текущего выделенного диапазона. Для этого используйте следующий код в процедуре UserForm_Initialize:
Скриншот с моего ноутбука
Скриншот с моего ноутбука
  • Избегайте использования внутри Frame или MultiPage: Не размещайте элемент RefEdit внутри элементов Frame или MultiPage, так как это может привести к сбоям в работе Excel.
  • Проверка допустимости диапазона: Элемент RefEdit не всегда возвращает действительный диапазон, так как пользователь может ввести любой текст. Поэтому нужно проверять корректность введённого диапазона:
Скриншот с моего ноутбука
Скриншот с моего ноутбука
  • Выбор диапазона на другом листе: Пользователь может выбрать диапазон на другом листе. В таком случае адрес диапазона будет включать имя листа, например: Лист2!$B$1:$E$4.
  • Выбор одной ячейки: Если требуется выбрать только одну ячейку, указывайте верхнюю левую ячейку выделенного диапазона:
Скриншот с моего ноутбука
Скриншот с моего ноутбука

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

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

В статье №138 упоминается метод InputBox для выделения диапазона, который можно использовать как альтернативу элементу управления RefEdit.

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