mail mail

Загрузка изображений из интернета по ссылкам в одну папку

Загрузка файлов (изображений) из интернета

Макрос предназначен для загрузки изображений (или любых других файлов) из интернета, и сохранения скачанных файлов в одну папку.

Исходные данные для работы макроса:

таблица, в которой содержатся по меньшей мере 2 столбца - один с гиперссылками, второй - с именами файлов.

Особенности макроса:

  • создаваемым файлам присваиваются имена из выбранного столбца листа Excel
  • макрос корректно работает со ссылками, содержащими символы кириллицы
  • автоматическое добавление расширения для скачиваемых файлов (если имя файла из ячейки его не содержит)

 

Настройки макроса легко выполнить, изменив в коде значения констант:

    Const НазваниеПапкиДляФайлов$ = "Фотографии"    ' так будет называться создаваемая папка
   Const НомерСтолбцаСГиперссылками = 6    ' из этого столбца макрос берет гиперссылки для загрузки файлов
   Const НомерСтолбцаСИменамиФайлов = 4    ' из этого столбца макрос берет имена для создаваемых файлов
   Const НомерПервойСтрокиСДанными = 2    ' с какой строки листа начинаем обрабатывать данные
   Const РасширениеФайлов$ = ".jpg"    ' этот текст добавляется справа к именам создаваемых файлов

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

Код основного макроса:

Sub СкачатьИзображения()
    Const НазваниеПапкиДляФайлов$ = "Фотографии"    ' так будет называться создаваемая папка
   Const НомерСтолбцаСГиперссылками = 6    ' из этого столбца макрос берет гиперссылки для загрузки файлов
   Const НомерСтолбцаСИменамиФайлов = 4    ' из этого столбца макрос берет имена для создаваемых файлов
   Const НомерПервойСтрокиСДанными = 2    ' с какой строки листа начинаем обрабатывать данные
   Const РасширениеФайлов$ = ".jpg"    ' этот текст добавляется справа к именам создаваемых файлов

    Dim sh As Worksheet, cell As Range, ra As Range: Application.ScreenUpdating = False
    ПапкаДляФайлов$ = ThisWorkbook.Path & "\" & НазваниеПапкиДляФайлов$ & "\"
    On Error Resume Next: MkDir ПапкаДляФайлов$    ' создаём папку, если её ещё нет

    Dim pi As New ProgressIndicator
    pi.Show "Загрузка файлов из интернета"
    Set sh = ActiveSheet    ' обрабатываем только активный лист

    ' диапазон заполненных ячеек в столбце НомерСтолбцаСГиперссылками (без строк заголовка таблицы)
   Set ra = sh.Range(sh.Cells(НомерПервойСтрокиСДанными, НомерСтолбцаСГиперссылками), _
                      sh.Cells(sh.Rows.Count, НомерСтолбцаСГиперссылками).End(xlUp))
    pi.StartNewAction , , "Загрузка файлов", , , ra.Cells.Count

    For Each cell In ra.Cells    ' перебираем все ячейки диапазона
       ' формируем путь к новому файлу, заменяя запрещённые символы в имени файла на _подчеркивание_
       ИмяФайла$ = ПапкаДляФайлов$ & Replace_symbols(cell.EntireRow.Cells(НомерСтолбцаСИменамиФайлов))
        If Not ИмяФайла$ Like "*" & РасширениеФайлов$ Then ИмяФайла$ = ИмяФайла$ & РасширениеФайлов$

        ' обрабатываем ссылку, преобразуя её в URLEncode
       Ссылка$ = RussianStringToURLEncode(cell.Text)

        pi.SubAction , "Строка: " & cell.Row, "Файл: " & ИмяФайла$
        ' сохраняем очередную ссылку в виде файла в  папку
       If DownLoadFile(Ссылка, ИмяФайла) Then
            FilesCount% = FilesCount% + 1    ' Debug.Print "Скачан файл: " & Ссылка
       Else
            MsgBox "Не удалось загрузить файл " & Ссылка, vbCritical
        End If
    Next cell
    pi.Hide    ' закрываем прогресс-бар
   Application.ScreenUpdating = True
    msg = "Обработано ссылок: " & ra.Cells.Count & ".  Загружено файлов: " & FilesCount% & vbNewLine
    msg = msg & "Файлы помещены в папку """ & ПапкаДляФайлов$ & """"
    MsgBox msg, vbInformation, "Загрузка файлов завершена"
End Sub

ВложениеРазмер
DownloadPictures2.xls91.5 КБ

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Разобрался сам, удалил следующее
Else
MsgBox "Не удалось загрузить файл " & Ссылка, vbCritical

и все стало работать как мне надо. Еще раз большое спасибо !!!!!

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

Отличный макрос!!!! Автору БОЛЬШОЕ СПАСИБО!!!!!!!

За обрабатываемый диапазон ячеек отвечает эта строка в коде:

Set ra = sh.Range(sh.Cells(НомерПервойСтрокиСДанными, НомерСтолбцаСГиперссылками), _
                      sh.Cells(sh.Rows.Count, НомерСтолбцаСГиперссылками).End(xlUp))

Если надо обработать строки заданного диапазон, можете заменить эту строку следующим кодом:
(выберите наиболее подходящий вариант из трёх предложенных)

    ' будут обработаны гиперссылки в строках с 8-й по 25-ю включительно
   Set ra = sh.Range(sh.Cells(8, НомерСтолбцаСГиперссылками), sh.Cells(25, НомерСтолбцаСГиперссылками))

    ' будут обработаны гиперссылки в диапазоне ячеек d4:d32
   Set ra = sh.Range("d4:d32")

    ' будут обработаны гиперссылки в столбце НомерСтолбцаСГиперссылками ТОЛЬКО ДЛЯ ВЫДЕЛЕННЫХ СТРОК
   ' (достаточно, чтобы в строке была выделена хоть одна ячейка)
   Set ra = Range(Selection.EntireRow, Columns(НомерСтолбцаСГиперссылками))

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

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

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