|
ВНИМАНИЕ: Данная программа использует вызов системных функций - WinAPI Поскольку синтаксис вызова этих функций в различных версиях Windows и Office может отличаться, работа программы на всех компьютерах не гарантируется!Все размещённые на сайте макросы тестировались в Excel 2003 и 2007 под управлением 32-битной версии Windows XP Если вы работаете в 64-битной версии Windows, или используете Office 2010 (в котором встроена 7-я версия VBA), По указанным причинам, скорее всего, макрос не будет работать под управлением MacOS (в Excel 2004, 2008, 2011 и т.п.) |
Данный макрос перебирает все строки на листе, и для каждой строки скачивает из интернета картинки, ссылки на которые присутствуют в этой строке (начиная с 3 столбца) В процессе загрузки изображений из интернета отображается 2-уровневый прогресс-бар, на котором можно видеть текущее состояние процесса. При формировании имён файлов и путей к папкам применяется замена запрещённых символов на допустимые: Для загрузки изображений применена WinAPI-функция URLDownloadToFile в таком виде: Function DownLoadFile(FromPathName, ToPathName) As Boolean DownLoadFile = URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0 End Function Папки с подпапками создаются тоже с использованием WinAPI: http://excelvba.ru/code/MkDir Для обработки данных на листе использован такой макрос: Sub ОсновнойМакрос() Dim sh As Worksheet, cell As Range, ra As Range: Application.ScreenUpdating = False Dim pi As New ProgressIndicator pi.Show "Загрузка фотографий" Set sh = ActiveSheet ' обрабатываем только активный лист ' For Each sh In ThisWorkbook.Worksheets ' перебираем все листы ' диапазон заполненных ячеек в столбце А, начиная с A2 Set ra = sh.Range(sh.[A2], sh.Range("A" & sh.Rows.Count).End(xlUp)) For Each cell In ra.Cells ' перебираем все ячейки диапазона ' формируем путь к новому файлу Путь = ThisWorkbook.Path & "\" & Replace_symbols(sh.Name) & _ "\" & Replace_symbols(cell) & "\" n = 100 / ra.Cells.Count: s1 = d * n + 1: s2 = (d + 1) * n: d = d + 1 pi.StartNewAction s1, s2, "Каталог: " & cell, "Загрузка фото с листа " & sh.Name CreateFolderWithSubfolders Путь ' создаём папку КолвоСсылок = cell.EntireRow.Cells(sh.Columns.Count).End(xlToLeft).Column - 2 If КолвоСсылок < 0 Then КолвоСсылок = 0 Dim pi2 As New ProgressIndicator: Set pi2 = pi.AddChildIndicator("Загрузка фото из строки") pi2.StartNewAction 5, 100, "Загрузка фото ...", , , КолвоСсылок ' перебираем все ссылки For i = 3 To cell.EntireRow.Cells(sh.Columns.Count).End(xlToLeft).Column pi2.SubAction , Путь, Replace_symbols(cell.Next) & "_" & (i - 2) & ".jpg" ИмяФайла = Путь & Replace_symbols(cell.Next) & "_" & (i - 2) & ".jpg" Ссылка = cell.EntireRow.Cells(i).Text ' Debug.Print ИмяФайла, Ссылка ' сохраняем очередную ссылку в виде файла в нужную папку If DownLoadFile(Ссылка, ИмяФайла) Then Debug.Print "Скачан файл: " & Ссылка Else MsgBox "Не удалось загрузить файл " & Ссылка, vbCritical End If Next i pi2.Hide Next cell ' Next sh ' перебираем все листы (переход к следующему листу) pi.Hide ' закрываем прогресс-бар End Sub Смотрите также аналогичный (более простой) макрос загрузки изображений
|
|||||||

Комментарии
Отправить комментарий