Версия для печати

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

Что умеет Excel

 

Вы получили по почте файл-прайс с изображениями товара и эти картинки нужны Вам? Но не на листе Excel, а именно как картинки? Или Вы просто хотите картинки из листа Excel сохранить как обычные, но…Как? Ведь даже команды в Excel такой нет. Вставить картинки можно, а вот обратно — увы…А если таких книг много? И из всех надо сохранить картинки? Вот я и подумал — надо бы написать некий код, который бы исправил данную несправедливость. Ну и, конечно, решил сделать код не только для себя, но и для всех, кому это может вдруг понадобиться. Собственно, вот и код:

Sub Save_Object_As_Picture()
    Dim avFiles, li As Long, oObj As Object, wsSh As Worksheet
    Dim sBookName As String, sName As String
 
    avFiles = Application.GetOpenFilename("Excel Files(*.xls*),*.xls*", , "Выбрать файлы", , True)
    If VarType(avFiles) = vbBoolean Then Exit Sub
 
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
 
    For li = LBound(avFiles) To UBound(avFiles)
        Workbooks.Open avFiles(li)
        sBookName = ActiveWorkbook.Name
        For Each wsSh In Sheets
            For Each oObj In wsSh.Shapes
                If oObj.Type = 13 Then
                    '13 – картинки
                    '1 – автофигуры
                    '3 – диаграммы
                    oObj.Copy
                    Workbooks.Add
                    ActiveWorkbook.SaveAs ThisWorkbook.Path & Application.PathSeparator & "TempBook.xls"
                    sName = ThisWorkbook.Path & Application.PathSeparator & sBookName & "_" & wsSh.Name & "_" & oObj.Name
                    ActiveSheet.Paste
                    With ActiveSheet.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart
                        .Paste
                        .Export Filename:=sName & ".jpg", FilterName:="JPG"
                    End With
                    ActiveWorkbook.ChangeFileAccess xlReadOnly
                    Kill ActiveWorkbook.FullName
                    ActiveWorkbook.Close 0
                End If
            Next oObj
        Next wsSh
        ActiveWorkbook.Close 0
    Next li
    Set oObj = Nothing: Set wsSh = Nothing
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Объекты сохранены в папке: " & ThisWorkbook.Path, vbInformation, "www.excel-vba.ru"
End Sub
Sub Save_Object_As_Picture()
    Dim avFiles, li As Long, oObj As Object, wsSh As Worksheet
    Dim sBookName As String, sName As String

    avFiles = Application.GetOpenFilename("Excel Files(*.xls*),*.xls*", , "Выбрать файлы", , True)
    If VarType(avFiles) = vbBoolean Then Exit Sub

    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For li = LBound(avFiles) To UBound(avFiles)
        Workbooks.Open avFiles(li)
        sBookName = ActiveWorkbook.Name
        For Each wsSh In Sheets
            For Each oObj In wsSh.Shapes
                If oObj.Type = 13 Then
                    '13 – картинки
                    '1 – автофигуры
                    '3 – диаграммы
                    oObj.Copy
                    Workbooks.Add
                    ActiveWorkbook.SaveAs ThisWorkbook.Path & Application.PathSeparator & "TempBook.xls"
                    sName = ThisWorkbook.Path & Application.PathSeparator & sBookName & "_" & wsSh.Name & "_" & oObj.Name
                    ActiveSheet.Paste
                    With ActiveSheet.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart
                        .Paste
                        .Export Filename:=sName & ".jpg", FilterName:="JPG"
                    End With
                    ActiveWorkbook.ChangeFileAccess xlReadOnly
                    Kill ActiveWorkbook.FullName
                    ActiveWorkbook.Close 0
                End If
            Next oObj
        Next wsSh
        ActiveWorkbook.Close 0
    Next li
    Set oObj = Nothing: Set wsSh = Nothing
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Объекты сохранены в папке: " & ThisWorkbook.Path, vbInformation, "www.excel-vba.ru"
End Sub

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

Это может понадобится не всем и весьма нечасто, но если уж понадобится, так понадобится.

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

  Tips_Macro_Save_Object_As_Picture.xls (46,5 KiB, 1 379 скачиваний)

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



Поддержать автора сайта
Поделиться ссылкой
  1. 15 Декабрь 2011 в 09:42 | #1

    Смотря на что пароль — если картинки можно сохранить вручную — то и макросом получится. Если же пароль на лист с запретом изменения и выделения объектов — узнавайте пароль и сохраняйте. Если пароль на проект VBA — то проблем вообще не должно быть, он там роли не играет.

  2. Мила
    15 Декабрь 2011 в 14:19 | #2

    @Дмитрий(Админ) честно говоря я в этом не разбираюсь. Если документ Вам скину можете помочь? Буду Вам безмерно благодарна!!!!!!!

  3. Анна
    15 Февраль 2012 в 23:12 | #3

    Браво!

  4. 19 Март 2012 в 15:06 | #4

    Спасибо, скрипт помог, но есть одна проблема. Мне прислали файл с изображениями, но они имеют размер не 100% на 100% а произвольное. Можно ли поправить скрипт так, чтобы он сохранял произвольно деформированные изображения в 100% размере?

  5. 28 Март 2012 в 23:59 | #5

    Спасибо, очень помогло. А по поводу не пропорциональных и не 100% изображений, я тоже с этим столкнулся, решил проблему так: выделяете одно изображение, нажимаете ctrl+a, правой кнопкой по изображению, там свойства размеров, там указываете 100% предварительно убрав галку с «сохранять пропорции».

  6. dima
    3 Апрель 2012 в 12:50 | #6

    СПАСИБО ОГРОМНОЕ!

  7. бука
    5 Апрель 2012 в 13:46 | #7

    спасибо большое! то что нужно

  8. 5 Апрель 2012 в 19:56 | #8

    @kolelan
    аналогичная проблема — приходится через ворд перекидывать фотки с прайса чтоб в качестве не потеряли

  9. 12 Апрель 2012 в 12:38 | #9

    А куда этот код вставлять?

  10. 12 Апрель 2012 в 21:05 | #10

    Ростислав — ниже статьи есть ссылки на статьи, которые будут важны к прочтению. Одна из них: Что такое модуль? Какие бывают модули?
    Прочитайте её — код необоходимо вставить в Стандартный модуль.

  11. Сергей
    13 Апрель 2012 в 20:11 | #11

    Здравствуйте! Я полный ноль в этих вопросах… Зашёл в ексель с сотней картинок. Нажал Alt+F11. Нажал «Эта книга», вставил предложенный код и «file -> save». Но ничего не происходит… Может я что недоделываю? Подскажите, пожалуйста. Очень срочно нужно

  12. Сергей
    13 Апрель 2012 в 20:20 | #12

    Нажимал «module», «klass module», сохранял, выходил, но всё равно ничего не происходит

  13. Сергей
    13 Апрель 2012 в 20:31 | #13

    —————————
    Microsoft Visual Basic
    —————————
    The macros in this project are disabled. Please refer to the online help or documentation of the host application to determine how to enable macros.
    —————————
    ОК Справка
    —————————
    Что делать?

  14. 13 Апрель 2012 в 22:33 | #14
Страницы комментариев

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