Подскажите - как макросом сохранить их как jpg - в отдельные папки (соответствующие названиям листов) ? Нужно сохранить все фигуры, кроме тех у которых в названии есть слова "овал", "прямоугольник" или "линия".
Нужно обойти листы, на каждом обойти все фигуры, если группировка .type=msoGroup, то рекурсивно углубляться до единичной, проверить имя и если не из списка исключений записать .SaveAsPicture по сформированному пути . Имя листа или передавать или в глобальной держать. For Each .... For Each ...... if ... .type=.type=msoGroup then ..... ....
Вот похожий образец:
Sub Save_Object_As_Picture() Dim avFiles, li AsLong, oObj AsObject, wsSh As Worksheet, wsTmpSh As Worksheet Dim sImagesPath AsString, sBookName AsString, sName AsString Dim wbAct As Workbook Dim IsForEachWbFolder AsBoolean
IsForEachWbFolder = (MsgBox("Сохранять картинки каждой книги в отдельную папку?", vbQuestion + vbYesNo, "www.excel-vba.ru") = vbYes)
IfNot IsForEachWbFolder Then
sImagesPath = Environ("userprofile") & "\desktop\images\"'" IfDir(sImagesPath, 16) = ""Then MkDir sImagesPath EndIf EndIf OnErrorResumeNext
Application.ScreenUpdating = False
Application.DisplayAlerts = False Set wsTmpSh = ThisWorkbook.Sheets.Add For li = LBound(avFiles) ToUBound(avFiles) Set wbAct = Workbooks.Open(avFiles(li), False) 'создаем папку для сохранения картинок If IsForEachWbFolder Then
sImagesPath = wbAct.Path & "\" & wbAct.Name & "_images\" IfDir(sImagesPath, 16) = ""Then MkDir sImagesPath EndIf EndIf
sBookName = wbAct.Name For Each wsSh In Sheets For Each oObj In wsSh.Shapes If oObj.Type = 13Then '13 - картинки '1 - автофигуры '3 - диаграммы
oObj.Copy
sName = ActiveWorkbook.Name & "_" & wsSh.Name & "_" & oObj.Name With wsTmpSh.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart
.ChartArea.Border.LineStyle = 0
.Parent.Select
.Paste
.Export Filename:=sImagesPath & sName & ".jpg", FilterName:="JPG"
.Parent.Delete EndWith EndIf Next oObj Next wsSh
wbAct.Close 0 Next li Set oObj = Nothing: Set wsSh = Nothing
wsTmpSh.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Объекты сохранены", vbInformation, "www.excel-vba.ru" EndSub
Здравствуйте. Помогите изменить макрос.
На листах файла эксель расставлены группы фигур.
Подскажите - как макросом сохранить их как jpg - в отдельные папки (соответствующие названиям листов) ? Нужно сохранить все фигуры, кроме тех у которых в названии есть слова "овал", "прямоугольник" или "линия".
Нужно обойти листы, на каждом обойти все фигуры, если группировка .type=msoGroup, то рекурсивно углубляться до единичной, проверить имя и если не из списка исключений записать .SaveAsPicture по сформированному пути . Имя листа или передавать или в глобальной держать. For Each .... For Each ...... if ... .type=.type=msoGroup then ..... ....
Вот похожий образец:
Sub Save_Object_As_Picture() Dim avFiles, li AsLong, oObj AsObject, wsSh As Worksheet, wsTmpSh As Worksheet Dim sImagesPath AsString, sBookName AsString, sName AsString Dim wbAct As Workbook Dim IsForEachWbFolder AsBoolean