Как сохранить картинки из листа 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 скачиваний)
Также см.:
→Сохранить диаграммы в графический файл
→Сохранение выделенного диапазона в графический файл
→Что такое модуль? Какие бывают модули?

8999

Смотря на что пароль — если картинки можно сохранить вручную — то и макросом получится. Если же пароль на лист с запретом изменения и выделения объектов — узнавайте пароль и сохраняйте. Если пароль на проект VBA — то проблем вообще не должно быть, он там роли не играет.
честно говоря я в этом не разбираюсь. Если документ Вам скину можете помочь? Буду Вам безмерно благодарна!!!!!!!
Браво!
Спасибо, скрипт помог, но есть одна проблема. Мне прислали файл с изображениями, но они имеют размер не 100% на 100% а произвольное. Можно ли поправить скрипт так, чтобы он сохранял произвольно деформированные изображения в 100% размере?
Спасибо, очень помогло. А по поводу не пропорциональных и не 100% изображений, я тоже с этим столкнулся, решил проблему так: выделяете одно изображение, нажимаете ctrl+a, правой кнопкой по изображению, там свойства размеров, там указываете 100% предварительно убрав галку с «сохранять пропорции».
СПАСИБО ОГРОМНОЕ!
спасибо большое! то что нужно
аналогичная проблема — приходится через ворд перекидывать фотки с прайса чтоб в качестве не потеряли
А куда этот код вставлять?
Ростислав — ниже статьи есть ссылки на статьи, которые будут важны к прочтению. Одна из них: Что такое модуль? Какие бывают модули?
Прочитайте её — код необоходимо вставить в Стандартный модуль.
Здравствуйте! Я полный ноль в этих вопросах… Зашёл в ексель с сотней картинок. Нажал Alt+F11. Нажал «Эта книга», вставил предложенный код и «file -> save». Но ничего не происходит… Может я что недоделываю? Подскажите, пожалуйста. Очень срочно нужно
Нажимал «module», «klass module», сохранял, выходил, но всё равно ничего не происходит
—————————
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.
—————————
ОК Справка
—————————
Что делать?
Сергей: