Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Сохранение некоторых фигур - как jpg в отдельные папки - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Сохранение некоторых фигур - как jpg в отдельные папки
dmitrijaltman8 Дата: Четверг, 16.12.2021, 17:26 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 20% ±

2016
Здравствуйте.
Помогите изменить макрос.

На листах файла эксель расставлены группы фигур.

Подскажите - как макросом сохранить их как jpg - в отдельные папки (соответствующие названиям листов) ?
Нужно сохранить все фигуры, кроме тех у которых в названии есть слова "овал", "прямоугольник" или "линия".

Нужно обойти листы, на каждом обойти все фигуры, если группировка .type=msoGroup, то рекурсивно углубляться до единичной, проверить имя и если не из списка исключений записать .SaveAsPicture по сформированному пути . Имя листа или передавать или в глобальной держать.
For Each .... For Each ...... if ... .type=.type=msoGroup then ..... ....

Вот похожий образец:


Sub Save_Object_As_Picture()
    Dim avFiles, li As Long, oObj As Object, wsSh As Worksheet, wsTmpSh As Worksheet
    Dim sImagesPath As String, sBookName As String, sName As String
    Dim wbAct As Workbook
    Dim IsForEachWbFolder As Boolean

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

    IsForEachWbFolder = (MsgBox("Сохранять картинки каждой книги в отдельную папку?", vbQuestion + vbYesNo, "www.excel-vba.ru") = vbYes)

    If Not IsForEachWbFolder Then
        sImagesPath = Environ("userprofile") & "\desktop\images\" '"
        If Dir(sImagesPath, 16) = "" Then
            MkDir sImagesPath
        End If
    End If
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set wsTmpSh = ThisWorkbook.Sheets.Add
    For li = LBound(avFiles) To UBound(avFiles)
        Set wbAct = Workbooks.Open(avFiles(li), False)
        'создаем папку для сохранения картинок
        If IsForEachWbFolder Then
            sImagesPath = wbAct.Path & "\" & wbAct.Name & "_images\"
            If Dir(sImagesPath, 16) = "" Then
                MkDir sImagesPath
            End If
        End If
        sBookName = wbAct.Name
        For Each wsSh In Sheets
            For Each oObj In wsSh.Shapes
                If oObj.Type = 13 Then
                    '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
                    End With
                End If
            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"
End Sub

К сообщению приложен файл: 4429141.xlsb (16.4 Kb)
 
Ответить
СообщениеЗдравствуйте.
Помогите изменить макрос.

На листах файла эксель расставлены группы фигур.

Подскажите - как макросом сохранить их как jpg - в отдельные папки (соответствующие названиям листов) ?
Нужно сохранить все фигуры, кроме тех у которых в названии есть слова "овал", "прямоугольник" или "линия".

Нужно обойти листы, на каждом обойти все фигуры, если группировка .type=msoGroup, то рекурсивно углубляться до единичной, проверить имя и если не из списка исключений записать .SaveAsPicture по сформированному пути . Имя листа или передавать или в глобальной держать.
For Each .... For Each ...... if ... .type=.type=msoGroup then ..... ....

Вот похожий образец:
[vba]
Sub Save_Object_As_Picture()    Dim avFiles; li As Long; oObj As Object; wsSh As Worksheet; wsTmpSh As Worksheet    Dim sImagesPath As String; sBookName As String; sName As String    Dim wbAct As Workbook    Dim IsForEachWbFolder As Boolean      avFiles = Application.GetOpenFilename("Excel Files(*.xls*),*.xls*"; ; "Выбрать файлы"; ; Тrue)    If VarТype(avFiles) = vbBoolean Then Exit Sub      IsForEachWbFolder = (MsgBox("Сохранять картинки каждой книги в отдельную папку?"; vbQuestion + vbYesNo; "www.excel-vba.ru") = vbYes)      If Not IsForEachWbFolder Then        sImagesPath = Environ("userprofile") & "\desktop\images\" '"        If Dir(sImagesPath, 16) = "" Тhen            MkDir sImagesPath        End If    End If    On Error Resume Чext    Application.ScreenUpdating = False    Application.DisplayAlerts = False    Set wsТmpSh = ТhisWorkbook.Sheets.Add    For li = LBound(avFiles) Тo UBound(avFiles)        Set wbAct = Workbooks.Open(avFiles(li), False)        'создаем папку для сохранения картинок        If IsForEachWbFolder Тhen            sImagesPath = wbAct.Path & "\" & wbAct.Name & "_images\"            If Dir(sImagesPath, 16) = "" Тhen                MkDir sImagesPath            End If        End If        sBookЧame = wbAct.Name        For Each wsSh In Sheets            For Each oObj In wsSh.Shapes                If oObj.Type = 13 Тhen                    '13 - картинки                    '1 - автофигуры                    '3 - диаграммы                    oObj.Copy                    sЧame = ActiveWorkbook.Name & "_" & wsSh.Name & "_" & oObj.Name                    With wsТmpSh.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart                        .ChartArea.Border.LineStyle = 0                        .Parent.Select                        .Paste                        .Export Filename:=sImagesPath & sЧame & ".jpg", FilterЧame:="JPG"                        .Parent.Delete                    End With                End If            Чext oObj        Чext wsSh        wbAct.Close 0    Чext li    Set oObj = Чothing: Set wsSh = Чothing    wsТmpSh.Delete    Application.DisplayAlerts = Тrue    Application.ScreenUpdating = Тrue    MsgBox "Объекты сохранены", vbInformation, "www.excel-vba.ru"End Sub
[/vba]

Автор - dmitrijaltman8
Дата добавления - 16.12.2021 в 17:26
RAN Дата: Четверг, 16.12.2021, 17:30 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМы их в дверь, они в окно

Автор - RAN
Дата добавления - 16.12.2021 в 17:30
dmitrijaltman8 Дата: Четверг, 16.12.2021, 17:36 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 20% ±

2016
RAN, а что вы на закрытую тему-то ссылаетесь ?
 
Ответить
СообщениеRAN, а что вы на закрытую тему-то ссылаетесь ?

Автор - dmitrijaltman8
Дата добавления - 16.12.2021 в 17:36
Serge_007 Дата: Четверг, 16.12.2021, 17:40 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата dmitrijaltman8, 16.12.2021 в 17:36, в сообщении № 3 ( писал(а)):
что вы на ... тему-то ссылаетесь ?
dmitrijaltman8, Вы полгода на форуме
Когда правила прочитаете?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата dmitrijaltman8, 16.12.2021 в 17:36, в сообщении № 3 ( писал(а)):
что вы на ... тему-то ссылаетесь ?
dmitrijaltman8, Вы полгода на форуме
Когда правила прочитаете?

Автор - Serge_007
Дата добавления - 16.12.2021 в 17:40
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!