mail mail

ВНИМАНИЕ: Данная программа использует вызов системных функций - WinAPI

Поскольку синтаксис вызова этих функций в различных версиях Windows и Office может отличаться, работа программы на всех компьютерах не гарантируется!

Все размещённые на сайте макросы тестировались в Excel 2003 и 2007 под управлением 32-битной версии Windows XP

Если вы работаете в 64-битной версии Windows, или используете Office 2010 (в котором встроена 7-я версия VBA),
то вполне вероятно, что макрос работать не будет (требуется доработка вызова функций WinAPI)

По указанным причинам, скорее всего, макрос не будет работать под управлением MacOS Excel 2004, 2008, 2011 и т.п.)

Загрузка картинок из интернета по ссылкам, и сохранение их в отдельные папки

Вид исходный таблицы со ссылками на картинки в интернете

Данный макрос перебирает все строки на листе, и для каждой строки скачивает из интернета картинки, ссылки на которые присутствуют в этой строке (начиная с 3 столбца)

В процессе загрузки изображений из интернета отображается 2-уровневый прогресс-бар, на котором можно видеть текущее состояние процесса.

При формировании имён файлов и путей к папкам применяется замена запрещённых символов на допустимые:
http://excelvba.ru/code/Replace_symbols

Для загрузки изображений применена 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

Смотрите также аналогичный (более простой) макрос загрузки изображений

ВложениеРазмер
DownloadPictures.xls85 КБ

Комментарии

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

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
15 + 3 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.