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

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Имп. каждые 5 фот. со указан. размерами и местам на листах. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Имп. каждые 5 фот. со указан. размерами и местам на листах. (Макросы/Sub)
Имп. каждые 5 фот. со указан. размерами и местам на листах.
Maratej Дата: Четверг, 26.01.2017, 13:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте. Суть в том, что существующий макрос, который импортирует все фото из указанной папки и располагает их через определенное количество строк, друг за другом, начиная с указанной строки и импортирует их с одинаковым указанным разрешением.
[vba]
Код
Sub AddOlEObject()

    Dim mainWorkBook As Workbook

    Set mainWorkBook = ActiveWorkbook
    
    For i = 4 To ThisWorkbook.Sheets.Count 'отсчет выгрузки фоток с "--" листа
    
    With Sheets(i) 'процедура для каждого листа далее
        
    Sheets(i).Activate
    
    Folder = Range("AB3") 'адрес папки с фотками
    
    Folderpath = Folder 'папка с фотками
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    NoOfFiles = fso.GetFolder(Folder).Files.Count
    
    Set listfiles = fso.GetFolder(Folderpath).Files
    
    For Each fls In listfiles
       
       strCompFilePath = Folder & "\" & Trim(fls.Name) 'названия картинок
        
        If strCompFilePath <> "" Then
            
            If (InStr(1, strCompFilePath, "jpg", vbTextCompare) > 1 _
            Or InStr(1, strCompFilePath, "jpeg", vbTextCompare) > 1 _
            Or InStr(1, strCompFilePath, "png", vbTextCompare) > 1) Then
                 counter = counter + 26 'расстояние между фото
                Call insert(strCompFilePath, counter - 16) 'расстояние от первой строки
                Sheets(i).Activate
            End If
        End If
    Next
End With
counter = 0
Next
End Sub

Function insert(PicPath, counter)
    
    With ActiveSheet.Pictures.insert(PicPath)
        With .ShapeRange
            .LockAspectRatio = msoTrue
            .Width = 204 'ширина фото
            .Height = 379 'высота фото
        End With
        .Left = ActiveSheet.Range("A" & counter).Left  'расстояние от первой строки (ширина ячейки)
        .Top = ActiveSheet.Range("A" & counter).Top  'расстояние от первой строки (ширина ячейки)
        .Placement = 1
        .PrintObject = True
    End With
End Function
[/vba]

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

что бы на лист импортировались каждые по порядку группы по пять фотографий из одной папки для второго шаблона

(например:
в лист n - фото a1,b1,c1,d1,e1;
в лист n+1 - фото a2,b2,c2,d2,e2 и т.д.)

при этом с заданным расположением и разрешением фотографий a,b,c,d,e.

Извините за название темы, хотелось максимально все описать.

Вчера мне здорово помогли с корректировкой существующей программы, спасибо!
 
Ответить
СообщениеЗдравствуйте. Суть в том, что существующий макрос, который импортирует все фото из указанной папки и располагает их через определенное количество строк, друг за другом, начиная с указанной строки и импортирует их с одинаковым указанным разрешением.
[vba]
Код
Sub AddOlEObject()

    Dim mainWorkBook As Workbook

    Set mainWorkBook = ActiveWorkbook
    
    For i = 4 To ThisWorkbook.Sheets.Count 'отсчет выгрузки фоток с "--" листа
    
    With Sheets(i) 'процедура для каждого листа далее
        
    Sheets(i).Activate
    
    Folder = Range("AB3") 'адрес папки с фотками
    
    Folderpath = Folder 'папка с фотками
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    NoOfFiles = fso.GetFolder(Folder).Files.Count
    
    Set listfiles = fso.GetFolder(Folderpath).Files
    
    For Each fls In listfiles
       
       strCompFilePath = Folder & "\" & Trim(fls.Name) 'названия картинок
        
        If strCompFilePath <> "" Then
            
            If (InStr(1, strCompFilePath, "jpg", vbTextCompare) > 1 _
            Or InStr(1, strCompFilePath, "jpeg", vbTextCompare) > 1 _
            Or InStr(1, strCompFilePath, "png", vbTextCompare) > 1) Then
                 counter = counter + 26 'расстояние между фото
                Call insert(strCompFilePath, counter - 16) 'расстояние от первой строки
                Sheets(i).Activate
            End If
        End If
    Next
End With
counter = 0
Next
End Sub

Function insert(PicPath, counter)
    
    With ActiveSheet.Pictures.insert(PicPath)
        With .ShapeRange
            .LockAspectRatio = msoTrue
            .Width = 204 'ширина фото
            .Height = 379 'высота фото
        End With
        .Left = ActiveSheet.Range("A" & counter).Left  'расстояние от первой строки (ширина ячейки)
        .Top = ActiveSheet.Range("A" & counter).Top  'расстояние от первой строки (ширина ячейки)
        .Placement = 1
        .PrintObject = True
    End With
End Function
[/vba]

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

что бы на лист импортировались каждые по порядку группы по пять фотографий из одной папки для второго шаблона

(например:
в лист n - фото a1,b1,c1,d1,e1;
в лист n+1 - фото a2,b2,c2,d2,e2 и т.д.)

при этом с заданным расположением и разрешением фотографий a,b,c,d,e.

Извините за название темы, хотелось максимально все описать.

Вчера мне здорово помогли с корректировкой существующей программы, спасибо!

Автор - Maratej
Дата добавления - 26.01.2017 в 13:05
nilem Дата: Четверг, 26.01.2017, 13:20 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
...раскидывать группы фотографий по папкам для каждого листа

а пути к этим папкам где-то записаны?
сейчас в АВ3 есть путь только к одной папке.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
...раскидывать группы фотографий по папкам для каждого листа

а пути к этим папкам где-то записаны?
сейчас в АВ3 есть путь только к одной папке.

Автор - nilem
Дата добавления - 26.01.2017 в 13:20
K-SerJC Дата: Четверг, 26.01.2017, 13:24 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
все фото в одной папке лежат, надо группы сортировать по именам файлов, верно?


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениевсе фото в одной папке лежат, надо группы сортировать по именам файлов, верно?

Автор - K-SerJC
Дата добавления - 26.01.2017 в 13:24
Maratej Дата: Четверг, 26.01.2017, 13:49 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
nilem, в первом шаблоне формула в ячейке в каждом листе с указанием адреса папки на компе, т.е. в каждый лист загружается из отдельной папки;
K-SerJC, да хотелось бы, что бы не надо было раскидывать фотки по папкам, а макрос сам отбирал из папки 1,2,3,4,5 фото (по порядку по наименованию) в первый лист, 6,7,8,9,10 (1+5;2+5;3+5;4+5;5+5) во второй лист и так далее;
и желательно, что бы можно было выставить для каждой фотографии (1 и 6; 2 и 7; 3 и 8; 4 и 9; 5 и 10) стандартное расположение на листе расположение на листе.
 
Ответить
Сообщениеnilem, в первом шаблоне формула в ячейке в каждом листе с указанием адреса папки на компе, т.е. в каждый лист загружается из отдельной папки;
K-SerJC, да хотелось бы, что бы не надо было раскидывать фотки по папкам, а макрос сам отбирал из папки 1,2,3,4,5 фото (по порядку по наименованию) в первый лист, 6,7,8,9,10 (1+5;2+5;3+5;4+5;5+5) во второй лист и так далее;
и желательно, что бы можно было выставить для каждой фотографии (1 и 6; 2 и 7; 3 и 8; 4 и 9; 5 и 10) стандартное расположение на листе расположение на листе.

Автор - Maratej
Дата добавления - 26.01.2017 в 13:49
nilem Дата: Четверг, 26.01.2017, 14:07 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
т.е. есть папка с фотками. Из нее забираем первые 5 фоток на один лист, вторые (просто по порядку) 5 - на другой лист и т.д.
Так?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениет.е. есть папка с фотками. Из нее забираем первые 5 фоток на один лист, вторые (просто по порядку) 5 - на другой лист и т.д.
Так?

Автор - nilem
Дата добавления - 26.01.2017 в 14:07
Maratej Дата: Четверг, 26.01.2017, 14:24 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
nilem, так точно!
 
Ответить
Сообщениеnilem, так точно!

Автор - Maratej
Дата добавления - 26.01.2017 в 14:24
nilem Дата: Четверг, 26.01.2017, 14:31 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
пробуйте так:


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепробуйте так:

Автор - nilem
Дата добавления - 26.01.2017 в 14:31
Maratej Дата: Четверг, 26.01.2017, 15:16 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
nilem, что то не запускается, не так вставил, посмотрите пожалуйста?
К сообщению приложен файл: __2.xlsm (82.9 Kb)
 
Ответить
Сообщениеnilem, что то не запускается, не так вставил, посмотрите пожалуйста?

Автор - Maratej
Дата добавления - 26.01.2017 в 15:16
nilem Дата: Четверг, 26.01.2017, 15:22 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Посмотрел, у меня вставляется.
Что именно не запускается? Вообще ничего не происходит?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеПосмотрел, у меня вставляется.
Что именно не запускается? Вообще ничего не происходит?

Автор - nilem
Дата добавления - 26.01.2017 в 15:22
Maratej Дата: Четверг, 26.01.2017, 15:35 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
nilem, вот еще один файл, я полностью скопировал код, только изменил

[vba]
Код
Folderpath = Sheets("Макрос1").Range("H2")    'адрес папки с фотками
[/vba]

на

[vba]
Код
Folderpath = Range("H3")    'адрес папки с фотками
[/vba]

вставил его в новую книгу, в листах прописал папку с фотками;

из-за большого количества фоток (1 сек что-то происходило но на листах фотки не отобразились( )
К сообщению приложен файл: __3.xlsm (21.8 Kb)
 
Ответить
Сообщениеnilem, вот еще один файл, я полностью скопировал код, только изменил

[vba]
Код
Folderpath = Sheets("Макрос1").Range("H2")    'адрес папки с фотками
[/vba]

на

[vba]
Код
Folderpath = Range("H3")    'адрес папки с фотками
[/vba]

вставил его в новую книгу, в листах прописал папку с фотками;

из-за большого количества фоток (1 сек что-то происходило но на листах фотки не отобразились( )

Автор - Maratej
Дата добавления - 26.01.2017 в 15:35
nilem Дата: Четверг, 26.01.2017, 16:05 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Даже не знаю, подставил свой путь, - все работает
Попробуйте вставлять как шейпы
[vba]
Код
Sub insPhoto(nWsh As Long, PicPath As String, counter As Long)
With ThisWorkbook.Sheets(nWsh)
    With .Cells(counter, 2)
        .Parent.Shapes.AddPicture PicPath, False, True, .Left, .Top, 200, 375
    End With
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеДаже не знаю, подставил свой путь, - все работает
Попробуйте вставлять как шейпы
[vba]
Код
Sub insPhoto(nWsh As Long, PicPath As String, counter As Long)
With ThisWorkbook.Sheets(nWsh)
    With .Cells(counter, 2)
        .Parent.Shapes.AddPicture PicPath, False, True, .Left, .Top, 200, 375
    End With
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 26.01.2017 в 16:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Имп. каждые 5 фот. со указан. размерами и местам на листах. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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