Хитрости »
Основные понятия (22)Здесь собраны статьи, в которых разъясняются базовые понятия работы в Excel и VBA, а так же проблемы, с которыми сталкивается большинство начинающих
Сводные таблицы и анализ данных (5) Раздел поможет изучить сводные таблицы и научиться их использовать "на полную"
Графики и диаграммы (4) Раздел поможет научиться создавать диаграммы и графики в Excel, в том числе нестандартные
Работа с VB проектом (10) С помощью статей раздела вы научитесь создавать процедуры программно и выполнять различные операции с объектами самого VBA
Power BI и Power Query (5) Здесь собраны статьи, раскрывающие различные возможности мощнейшего инструмента для визуализаций бизнесс-процессов Power BI и надстройки для Excel Power Query
Условное форматирование (5) Этот раздел поможет поближе познакомиться с Условным форматированием на примерах различных ситуаций
Списки и диапазоны (5) Статьи, посвященные работе не только с выпадающими списками, но и с диапазонами и хитростями их применения в рабочих файлах
Макросы(VBA процедуры) (59) Статьи раздела направлены на изучение VBA с детальным разбором кодов. Множество статей с примерами кодов под всевозможные ситуации с комментариями и пояснениями
Разное (34) Собраны статьи, которые не подходят ни под одну из представленных выше категорий или входят сразу в несколько. Но эти статье не менее полезные!

Как сохранить картинки из листа Excel в картинки JPG

Получили по почте файл-прайс с изображениями товара и эти картинки нужны в отдельной папки, а не на листе? Например для загрузки на сайт. Или для других целей. Подобной команды в Excel нет. Вставить картинки можно, а вот обратно к сожалению никак. Хорошо, если картинок штук 10, а если 100? А если таких книг много? И из всех надо сохранить картинки? Решил поделиться кодами, которые могут сохранять картинки из листа Excel в папку.
Если не знаете как применять коды Visual Basic for Applications, то настоятельно рекомендую к прочтению эти статьи:
Что такое макрос и где его искать?
Что такое модуль? Какие бывают модули?
Если хотите использовать один из нижеприведенных кодов, то следует создать стандартный модуль, скопировать нужные код и вставить его в этот модуль.


 
Сохранение выделенной картинки в файл
Все, что потребуется это выделить объект/картинку и выполнить нижеприведенный код:

Если необходимо сохранить не только картинки, но и другие объекты, то необходимо в коде в строке: If oObj.Type = 13 Then изменить цифру. В коде комментариями указано, какая цифра какой тип обозначает. Так же можно изменить и расширение итогового файла с ".gif" на ".jpg". Достаточно найти расширение gif в коде(в двух местах) и заменить их на jpg. Если ни один объект не выделен, то ничего не произойдет.



 
Сохранение всех картинок из всех выбранных файлов Excel в папку

Код позволяет выбрать одну или несколько книг Excel и сохраняет все картинки со всех листов выбранных книг. При запуске кода предлагается выбрать файлы Excel, картинки из которых надо сохранить. После этого появится запрос: "Сохранять картинки каждой книги в отдельную папку?"

  • Да - для каждой книги будет создана своя папка images, в которую будут сохранены картинки с именами вида: ИмяКниги_ИмяЛиста_ИмяФигуры
  • Нет - на рабочем столе пользователя будет создана папка images, в которую будут сохранены картинки с именами вида: ИмяКниги_ИмяЛиста_ИмяФигуры

Если необходимо сохранить не только картинки, но и другие объекты, то необходимо в коде в строке: If oObj.Type = 13 Then изменить цифру. В коде комментариями указано, какая цифра какой тип обозначает. Так же можно изменить и расширение итогового файла с ".jpg" на ".gif". Достаточно найти расширение jpg в коде(в двух местах) и заменить их на gif. В данном коде я намеренно сделал сохранение в формат jpg, чтобы можно было сравнить с предыдущим кодом и увидеть как правильно менять расширение(формат) файла.



 
Сохранить выделенный диапазон в картинку
Данные код сохраняет выделенный на листе диапазон в картинку.

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



 
СОХРАНЯЕМ ВСЕ КАРТИНКИ С ЛИСТА В ПАПКУ С ЗАПИСЬЮ В ЯЧЕЙКИ ИМЕН КАРТИНОК
Картинки на текст
Код ниже сохраняет все картинки на активном листе в папку images, которая создается в папке с книгой Excel, картинки из которой сохраняются. Если папки images нет - она будет создана. Картинкам даются имена "img1", "img2", "img3" и т.д. Картинки из ячеек удаляются, а на их место записывается имя картинки. Актуально, наверное, для тех, кто из таких файлов делает потом выгрузки в интернет-магазины и пр.

В коде все так же, как в кодах выше(можно сохранять другие объекты, можно изменить формат сохраняемых картинок). Только при этом в ячейку, в которой была картинка записывается имя, с которым эта картинка была сохранена в папку на компьютере. Сама картинка при этом удаляется. Если удалять не надо, то необходимо просто удалить строку:
oObj.Delete 'удаляем картинку с листа
Если необходимо записать в ячейку не только имя картинки, но и полный путь(включая путь к папке и расширение картинки), то надо вместо строки:
oObj.TopLeftCell.Value = sName
записать такую:
oObj.TopLeftCell.Value = sImagesPath & sName & ".jpg"



 
Сохранить картинки с листа с именами картинок из ячеек
Пожалуй, самый популярный код. Он сохраняет картинки из активного листа с именами, взятыми из ячеек, в которых эти картинки расположены. При этом можно указать, чтобы имена брались из той же строки, но другого столбца:

Укажите номер столбца с именами для картинок - указывается порядковый номер столбца на листе, из которого брать имя для сохраняемой картинки. Например, сами картинки в столбце H, а имена для них записаны в столбце B. Надо указать 2. Тогда для картинки в ячейке H3 будет использовано имя, записанное в ячейке В3. Расширение для картинки указывать не надо(например - image1, image2, image_product_sell1 и т.п.).
Если номер не указывать или указать 0 - то имя для картинок будет взято из тех ячеек, в которых находятся эти картинки.
Так же проверяется корректность значений в ячейках, т.к. они могут содержать символы, недопустимые в именах файлов(слеши и пр.). В этом случаи эти символы будут удалены. И если после удаления этих символов значение будет пустым - имена картинкам будут даваться с префиксом "unnamed_" и порядковым номером таких картинок.

Скачать пример

  Tips_Macro_Save_Object_As_Picture.xls (76,0 KiB, 12 345 скачиваний)

Также см.:
Сохранить диаграммы в графический файл
Сохранение выделенного диапазона в графический файл
Как скопировать картинку из примечания?


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Поиск по меткам

Access Multex Outlook Power BI Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Настройка Поиск данных Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx вебинар ссылки статьи тренинг
Обсуждение: оставлено 89 коммент.
  1. Стесняюсь спросить - а какого Александра Вы просите показать код? И почему так категорично? Он Вам чем-то обязан, надо полагать?

    • gde-site:

      Стесняюсь даже отвечать.. какого черта про Александра написал. За категоричность извините - Вы, Дмитрий, конечно, ничего нам не должны. Просто обычно отвечаете в течение суток, а тут дни идут - надежда тает( Будьте так любезны и просветите нас, как бы решить задачу с захватом имен файлов из соседних ячеек с картинками.

  2. Николай:

    Здравствуйте, Дмитрий!
    Помогите, пожалуйста: сохраняется лишь первое изображение, вместо остальных - белые (пустые) картинки. Та же самая ситуация и при использовании надстройки, код которой, должно быть, известен Александру.

  3. Спасибо автору. Все получилось. Единственное, не помешало бы более подробное описание по принципу применения кода для полных чайников. Пришлось погреть голову прежде чем картинки оказались там где нужно.:)

  4. Вася:

    Такой вопрос - а что если для oObj.TopLeftCell.Address попадается 2 и более картинок (т.е., к примеру, у двух картинок anchor ячейки совпадает)? У меня в результате этом сохраняется только одна, а желательно чтобы они сохранялись все по индексу, либо выбор какой-то, к примеру - самую большую по произведению высоты на ширину или что-то подобное.

  5. Александр:

    Здравствуйте, Дмитрий!
    Помогите, пожалуйста: Как из активного листа сделать .png файл
    В идеале .pdf но целиком как картинка, как будто оригинал распечатали и отсканировали!

  6. asken questa:

    Здравствуйте, а в чем может быть проблема - при сохранении файлов в виде jpg-картинок они все получаются белого цвета? Т.е. размеры сохраняются, но при этом внутри они целиком белые :-(

    • asken questa, подскажите какой именно код используется, какая версия офиса и ОС? Спасибо.

      • Сергей:

        Доброе время. Также получаются белые картинки. ОС Win10, Office 2016.

        • Сергей, ну и Вам тот же вопрос: какой код используется? Раз у Вас есть эта ошибка - напишите в каком из приложенных кодов, тогда я смогу хотя бы ошибку найти. Спасибо.

          • Сергей:

            Вот этот код "СОХРАНИТЬ КАРТИНКИ С ЛИСТА С ИМЕНАМИ КАРТИНОК ИЗ ЯЧЕЕК"

          • Сергей, 2016 офиса нет, но есть 365. Там все работает нормально, только что проверил. Попробуйте вместо этой строки:
            If oObj.Type = 13 Then
            записать такую:
            If oObj.Type = oObj.Type Then
            чтобы код сохранял ВСЕ объекты, а не только те, у которых внутренний тип картинка. Если при этом опять же все будут сохраняться белыми - будем думать дальше и искать пути решения для конкретных версий офиса.

          • Сергей:

            Дмитрий.Будет ответ?

  7. Сергей, Вам не кажется, что Ваш вопрос звучит как-то слишком нагло? :) Я же вроде Вам ничего не должен, чтобы в подобной требовательной манере с меня спрашивать. Понимаю, что вряд ли предполагался такой тон, но все же старайтесь как-то подбирать слова - я ведь не обязан все проблемы с кодами на сайте(которые я предоставляю бесплатно), решать оперативно и по требованию. У меня же есть и работа, которую надо работать, как ни странно :)
    По сути: это проблема версий офиса, начиная с 2013. До причин, равно как и устранения самой проблемы, пока не добрался - на это больше времени нужно. Как только решу вопрос - сразу выложу, не переживайте. Я понимаю, что вопрос животрепещущий - но и я не имею возможности сидеть и часами устранять проблемы, которые Microsoft так лихо подкидывает невзначай :)

    • Александр:

      Дмитрий, добрый день, некоторое время использовал макрос, который вероятно взят у вас, для сохранения картинки в отдельный файл, но после обновления офиса до 365 тоже файл стал сохраняться просто как белое поле. Я приведу весь макрос, вдруг будет проще понять ошибку

      Буду благодарен, если удастся найти ошибку.

      • Правильно Ваш код должен выглядеть так:

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Логин
Наши партнеры
Перейти
Перейти
Счетчики
Анализ сайта

Яндекс.Метрика
© 2016 Excel для всех  Войти