Событие листа Worksheet_SelectionChange позволяет отслеживать и реагировать на изменения выделенной ячейки на листе. Когда пользователь выбирает ячейку на листе, данное событие предоставляет возможность выполнять различные действия на основе выбора пользователя.
Сегодня разберем как используя событие Worksheet_SelectionChange можно добиться отображения нужного изображения (картинки).
📢 Файл с примером размещен в конце статьи 🔽
▶️ Предварительные настройки
🔘 Шаг 1: Определим источник данных.
Для данного примера будем использовать следующую таблицу данных:
🔘 Шаг 2: Требуемые для отображения изображения разместим на отдельном листе:
🔘 Шаг 3: Определим именованный диапазон:
🔘 Шаг 4: Добавим в ячейку для отображения любое изображение и укажем ссылку и имя:
▶️ Решение
Для реализации поставленной задачи будем использовать следующий макрос:
Благодаря событию Worksheet.SelectionChange код позволяет динамически обновлять содержимое картинки "изображение" на "Лист1" в зависимости от выбранной ячейки на "Лист2".
Application.Intersect представляет собой метод объекта Application, который используется для определения пересечения двух диапазонов ячеек. В данном коде используется для проверки, находится ли выбранная ячейка в диапазоне "Worksheet_Selecti".
- Если пересечение обнаружено, то изображение меняется на соответствующую ячейку на листе 2
- Иначе (т.е., выбранная ячейка не находится в диапазоне), он вернет значение Nothing, а изображение меняется на первую ячейку на листе 2 ("Лист2!A1"):
▶️ Дополнения
Если источник данных содержит достаточно большое число строк, то явное применение выше рассмотренного макроса может быть не совсем удобно. А потому внесем некоторые корректировки.
➡️ 1. Добавим сводную таблицу разместив поле "Товар" в области "Фильтры":
➡️ 2. Добавим срез по полю "Товар":
➡️ 3. Добавим макрос:
📝 Переменные:
- ws - используется для ссылки на лист, на котором расположен срез (в данном коде не используется, но может быть использовано в будущем, если потребуется выполнить дополнительные операции на других листах).
- sc - содержит срез (SlicerCache), который соответствует указанному имени "Срез_Товар".
- si - используется в цикле для обхода элементов среза (SlicerItems) и определения выбранного элемента.
- rng - содержит найденную ячейку, соответствующую значению выбранного элемента среза.
- searchValue - хранит значение выбранного элемента среза.
📝 Краткое описание
- При обновлении сводной таблицы, код проверяет наличие среза с именем "Срез_Товар" с помощью ThisWorkbook.SlicerCaches("Срез_Товар"). Если срез найден, он сохраняется в переменную sc.
- Далее, код обходит все элементы среза (SlicerItems), чтобы определить выбранный элемент. Когда выбранный элемент найден, его значение сохраняется в переменную searchValue.
- После того, как значение выбранного элемента определено, код ищет соответствующую ему ячейку в диапазоне "Worksheet_Selecti" на рабочем листе. Если ячейка найдена, она делается активной с помощью метода rng.Activate.
Таким образом, при обновлении сводной таблицы и выборе элемента в срезе "Срез_Товар", код автоматически переходит к соответствующей ячейке в таблице. Это позволяет легко отслеживать данные, связанные с выбранным элементом в сводной таблице.
▶️ Тестируем результат
📽 См. видео пример:
📍 Наши рекомендации 🔽