Макрос предназначен для загрузки изображений (или любых других файлов) из интернета, и сохранения скачанных файлов в одну папку.Исходные данные для работы макроса:таблица, в которой содержатся по меньшей мере 2 столбца - один с гиперссылками, второй - с именами файлов. Особенности макроса:
Настройки макроса легко выполнить, изменив в коде значения констант: 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
|
|||||||

Комментарии
Разобрался сам, удалил следующее
Else
MsgBox "Не удалось загрузить файл " & Ссылка, vbCritical
и все стало работать как мне надо. Еще раз большое спасибо !!!!!
Столкнулся с единственной проблеммой - если строчка пустая то выводится сообщение "Не удалось загрузить файл", а так как таких строк у меня очень много (не ко всем товарам имеется изображение) давольно таки не удобно постоянно сообщение закрывать.... есть ли вариант убрать это сообщение из кода?????
Заранее благодарствую.
Отличный макрос!!!! Автору БОЛЬШОЕ СПАСИБО!!!!!!!
За обрабатываемый диапазон ячеек отвечает эта строка в коде:
sh.Cells(sh.Rows.Count, НомерСтолбцаСГиперссылками).End(xlUp))
Если надо обработать строки заданного диапазон, можете заменить эту строку следующим кодом:
(выберите наиболее подходящий вариант из трёх предложенных)
Set ra = sh.Range(sh.Cells(8, НомерСтолбцаСГиперссылками), sh.Cells(25, НомерСтолбцаСГиперссылками))
Set ra = sh.Range("d4:d32")
' (достаточно, чтобы в строке была выделена хоть одна ячейка)
Set ra = Range(Selection.EntireRow, Columns(НомерСтолбцаСГиперссылками))
Как можно создать загрузку определенных строк или интервала заданных строк
Отправить комментарий