Найти тему

📌 Событие листа Worksheet.SelectionChange: отображение картинки по наименованию. Часть 1

Оглавление

Событие листа Worksheet_SelectionChange позволяет отслеживать и реагировать на изменения выделенной ячейки на листе. Когда пользователь выбирает ячейку на листе, данное событие предоставляет возможность выполнять различные действия на основе выбора пользователя.

Сегодня разберем как используя событие Worksheet_SelectionChange можно добиться отображения нужного изображения (картинки).

Событие листа Worksheet.SelectionChange: отображение картинки по наименованию.
Событие листа Worksheet.SelectionChange: отображение картинки по наименованию.

📢 Файл с примером размещен в конце статьи 🔽

-3

▶️ Предварительные настройки

🔘 Шаг 1: Определим источник данных.

Для данного примера будем использовать следующую таблицу данных:

Задача: при выборе определенного товара отображать его изображение.
Задача: при выборе определенного товара отображать его изображение.

🔘 Шаг 2: Требуемые для отображения изображения разместим на отдельном листе:

Изображения для отображения
Изображения для отображения

🔘 Шаг 3: Определим именованный диапазон:

-6

🔘 Шаг 4: Добавим в ячейку для отображения любое изображение и укажем ссылку и имя:

-7

▶️ Решение

Для реализации поставленной задачи будем использовать следующий макрос:

Обработчик события Worksheet.SelectionChange
Обработчик события Worksheet.SelectionChange

Благодаря событию Worksheet.SelectionChange код позволяет динамически обновлять содержимое картинки "изображение" на "Лист1" в зависимости от выбранной ячейки на "Лист2".

Application.Intersect представляет собой метод объекта Application, который используется для определения пересечения двух диапазонов ячеек. В данном коде используется для проверки, находится ли выбранная ячейка в диапазоне "Worksheet_Selecti".

  • Если пересечение обнаружено, то изображение меняется на соответствующую ячейку на листе 2
Отображение картинки по наименованию. Пример решения
Отображение картинки по наименованию. Пример решения
  • Иначе (т.е., выбранная ячейка не находится в диапазоне), он вернет значение Nothing, а изображение меняется на первую ячейку на листе 2 ("Лист2!A1"):
Ни одна ячейка не является активной
Ни одна ячейка не является активной

▶️ Дополнения

Если источник данных содержит достаточно большое число строк, то явное применение выше рассмотренного макроса может быть не совсем удобно. А потому внесем некоторые корректировки.

➡️ 1. Добавим сводную таблицу разместив поле "Товар" в области "Фильтры":

-11

➡️ 2. Добавим срез по полю "Товар":

Для подключения среза выполните следующее: 
1. Выберите ячейку в любой из сводных таблиц.
2. Перейдите в раздел Анализ → Фильтр → Вставить срез
3. В диалоговом окне "Вставить срез" выберите столбец для использования в качестве фильтра в срезе и нажмите 🆗
Для подключения среза выполните следующее: 1. Выберите ячейку в любой из сводных таблиц. 2. Перейдите в раздел Анализ → Фильтр → Вставить срез 3. В диалоговом окне "Вставить срез" выберите столбец для использования в качестве фильтра в срезе и нажмите 🆗

➡️ 3. Добавим макрос:

Обработчик события Worksheet_PivotTableUpdate, который вызывается при обновлении сводной таблицы на рабочем листе. Предназначен для автоматической смены активной ячейки на основе выбранного элемента среза "Срез_Товар".
Обработчик события Worksheet_PivotTableUpdate, который вызывается при обновлении сводной таблицы на рабочем листе. Предназначен для автоматической смены активной ячейки на основе выбранного элемента среза "Срез_Товар".

📝 Переменные:

  • ws - используется для ссылки на лист, на котором расположен срез (в данном коде не используется, но может быть использовано в будущем, если потребуется выполнить дополнительные операции на других листах).
  • sc - содержит срез (SlicerCache), который соответствует указанному имени "Срез_Товар".
  • si - используется в цикле для обхода элементов среза (SlicerItems) и определения выбранного элемента.
  • rng - содержит найденную ячейку, соответствующую значению выбранного элемента среза.
  • searchValue - хранит значение выбранного элемента среза.

📝 Краткое описание

  • При обновлении сводной таблицы, код проверяет наличие среза с именем "Срез_Товар" с помощью ThisWorkbook.SlicerCaches("Срез_Товар"). Если срез найден, он сохраняется в переменную sc.
  • Далее, код обходит все элементы среза (SlicerItems), чтобы определить выбранный элемент. Когда выбранный элемент найден, его значение сохраняется в переменную searchValue.
  • После того, как значение выбранного элемента определено, код ищет соответствующую ему ячейку в диапазоне "Worksheet_Selecti" на рабочем листе. Если ячейка найдена, она делается активной с помощью метода rng.Activate.

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

▶️ Тестируем результат

-14

📽 См. видео пример:

Отображение картинки по наименованию. Пример решения.mkv

📍 Наши рекомендации 🔽

-15
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас

СКАЧАТЬ ПРИМЕР

Наука
7 млн интересуются