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

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

Во многих встроенных диалоговых окнах Excel пользователи могут выбирать диапазоны ячеек. Например, в диалоговом окне "Подбор параметра" (его можно найти через Данные → Работа с данными → Анализ "что если" → Подбор параметра), пользователю можно указать две отдельные ячейки. Это можно сделать либо, введя имена диапазонов вручную, либо выделив их с помощью мыши. Пользовательские диалоговые окна Excel также могут предоставлять такие возможности с помощью элемента управления RefEdit. Хотя он выглядит иначе, чем стандартные элементы выбора диапазона, работает он точно так же. Когда пользователь щёлкает на кнопке справа от элемента управления RefEdit, диалоговое окно временно исчезает, и появляется указатель выбора диапазона. Это очень похоже на поведение встроенных диалоговых окон Excel. Однако стоит отметить, что элемент RefEdit не поддерживает специальные клавиши для выделения диапазона (например, нельзя использовать клавишу <End> и комбинацию <Shift+стрелка>). Также после нажатия на мале
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Во многих встроенных диалоговых окнах 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.

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