В ряде задач, связанных с созданием информативных отчетов, баз данных, каталогов и т.п., часто требуется взаимодействие с изображениями.
Если количество изображений велико, вручную добавлять их в таблицу может быть крайне утомительно и затратно по времени.
Но у нас есть решение!
Сегодня рассмотрим 3 (три) способа позволяющих автоматизировать процесс заполнения таблицы изображениями.
А какой из способов выбрать - решать Вам 😉.
📢 Файл с исходным кодом размещен в конце статьи 🔽
▶️ Исходные данные
В качестве примера рассмотрим ряд изображений расположенных в отдельной папке:
🎯 Задача: поместить изображения из данной папки в таблицу:
🔔 Обратите внимание! Мы предполагаем, что помимо изображений возможно потребуется ведение каких либо расчетов, а потому создаем именно таблицу:
▶️ Шаг 1. Задаем именованные диапазоны
Для удобства взаимодействия укажем соответствующие именованные диапазоны для каждого из столбцов:
▶️ Шаг 2. Создаем список всех изображений
Чтобы массово добавить названия изображений из указанной папки в столбец Excel применим макрос:
⚙️ Как это работает:
- Указываем путь к папке, в которой находятся изображения. В данном примере этот путь указан в качестве глобальной константы, что позволит использовать "FolderPath" в любом месте кода в книге. Кроме того, если потребуется изменить путь к папке, вы сможете сделать это один раз, и это изменение отразится во всем коде, использующем эту переменную.
- Выбираем лист, на котором необходимо добавить названия изображений. Вы можете указать нужный лист, заменив "ActiveSheet" на имя вашего листа.
- Столбец A начиная со второй строки очищаем от предыдущих данных (если они есть), чтобы избежать некорректных записей.
- Перебираем файлы в указанной папке. Для каждого файла проверяется его расширение, и если оно соответствует форматам изображений (JPG, JPEG, PNG, GIF), то название файла добавляется в столбец A:
- После добавления всех названий изображений, проверяем последнюю заполненную строку в столбце A. Если она пустая (например, ранее добавленное изображение было удалено), строка удаляется, чтобы избежать лишних пустых строк.
- Далее, устанавливаем фиксированную высоту ячеек в столбце A (в нашем примере =50), что обеспечит удобное отображение названий изображений.
▶️ Шаг 3. Добавляем изображения
Следующим этапом в соответствии указанным наименованиям добавим изображения:
⚙️ Как это работает:
- Определяем область destRange, в которой будут размещаться изображения. Вы можете изменить эту область, указав другой диапазон вместо "Рисунок".
- Область с изображениями на листе очищается командой ws.Pictures.Delete, чтобы удалить предыдущие изображения (если они были).
- Далее, перебираем ячейки в столбце "Наименование", где предполагается, что находятся имена файлов изображений. Для каждой ячейки собирается полный путь к файлу из указанной папки.
- Если файл существует в указанной папке (проверяется с помощью Dir(imgPath) <> ""), то изображение вставляется на лист.
- Затем устанавливается позиция, размер и центрирование в соответствии с областью destRange.
Представленный макрос также будет полезен полезен, если у вас уже есть список файлов изображений, и требуется массово добавить только изображения в заданный диапазон.
▶️ Шаг 4. Оптимизируем код
Для полноценной работы объединим два макроса в один:
🔔 Обратите внимание! В целях оптимизации так же добавлена обработка события (Application.EnableEvents) и управление обновлением экрана (Application.ScreenUpdating):
Это позволит избежать нежелательных реакций на события во время выполнения макроса, а экран не будет перерисовываться, что также ускорит заполнение данных.
Также мы добавили обработку ошибки. На случай если указанный путь не будет найден:
▶️ Дополнения
Чтобы сделать код более универсальным можно вместо назначенной глобальной константы использовать один из следующих подходов:
🔘 Способ 1: Используем глобальную переменную и InputBox:
В этом случае посредством InputBox будет запрошен путь к папке:
- Если поле ввода будет пустое, или пользователь закроет InputBox, то прекращаем выполнение макроса.
- Если путь указан не верно выводим соответствующее сообщение:
🔘 Способ 2: Используем глобальную переменную и диалоговое окно выбора папки.
Данный способ аналогичен выбору папки с помощью диалогового окна "Обзор" (как в стандартном диалоге выбора папки):
Вот пример, как это можно сделать:
⚙️ Как это работает:
- Application.FileDialog(msoFileDialogFolderPicker) создает диалоговое окно выбора папки;
- Пользователь выбирает папку;
- Выбранный путь к папке сохраняется в глобальной переменной FolderPath, которая в дальнейшем используется в макросе для добавления изображений и их наименований.
- Если выбор был отменен будет показано соответствующее сообщение:
Этот метод наряду с выше представленными поможет сэкономить время и упростить процесс добавления изображений из папки в таблицу Excel, но на наш взгляд является наиболее удобным способом.
▶️ Шаг 5. Тестируем результат
Чтобы использовать макрос, вы можете назначить его на кнопку или горячую клавишу для удобного вызова:
В результате названия изображений будут помещены в столбец A, а сами изображения в соответствующие ячейки столбца В, что и требовалось! 😉
📍 Рекомендуемые статьи 🔽