Скачать файлы по списку ссылок excel

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

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

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

таблица, в которой содержатся по меньшей мере 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

Добрый день, господа!
Есть задача:
— в файле формата xls есть список из 2000+ гиперссылок на фотографии в интернете
— необходимо скачать все фотки из данного списка на локальный комп

Есть какое-то решение или каким образом можно это реализовать своими силами?


  • Вопрос задан

    более трёх лет назад

  • 2745 просмотров

1. В соседнем столбце от столбца ссылок функцией «СЦЕПИТЬ» собираете командную строку для wget.
2. Копируете из Excel-а столбец командных строк и вставляете его в пустой CMD-файл, рядом располагаете wget.exe, и запускаете CMD.

Пригласить эксперта


  • Показать ещё
    Загружается…

ОБИТ

Санкт-Петербург

от 120 000 ₽

17 апр. 2023, в 02:32

5000 руб./за проект

17 апр. 2023, в 01:56

1200 руб./в час

17 апр. 2023, в 01:43

20000 руб./за проект

Минуточку внимания

Хитрости »

2 Декабрь 2016              40494 просмотров


Как скачать файл из интернета по ссылке

Вся суть статьи уже в заголовке. Возникает порой необходимость скачивания файлов из интернета только на основании ссылки. Например, это какие-то постоянно меняющиеся данные или автоматически генерируемая другим кодом ссылка. Или еще более усугубленный вариант — строк 100 со ссылками на файлы, которые надо скачать…Вот уж радости руками по каждой клацать :)
Поэтому выкладываю решение, которое в большинстве случае поможет при помощи Visual Basic for Applications скачать файл на основании ссылки URL:

'---------------------------------------------------------------------------------------
' File   : mDownloadFileFromURL
' Purpose: код позволяет скачивать файлы из интернета по указанной ссылке
'---------------------------------------------------------------------------------------
Option Explicit
 
'объявление функции API - URLDownloadToFile
'   работает на любых ПК под управлением ОС Windows
'   на MAC код работать не будет
#If Win64 Then 'для операционных систем с 64-разрядной архитектурой
    Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
            (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _
             ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong
#Else
    #If VBA7 Then 'для любых операционных систем с офисом 2010 и выше
        Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
            (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _
                ByVal dwReserved As Long, ByVal lpfnCB As LongPtr) As LongPtr
    #Else 'для 32-разрядных операционных систем
        Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                                        (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
                                        ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    #End If
#End If
'переменная для хранения пути к папке
Dim sFilePath As String
 
Function CallDownload(sFileURL As String, sFileName As String)
'   sFileURL  - ссылка URL для скачивания файла
'   sFileName - имя файла с расширением, которое будет присвоено после скачивания
 
    Dim h
    If sFilePath = "" Then
        'диалоговое окно выбора папки
        'подробнее: http://www.excel-vba.ru/chto-umeet-excel/dialogovoe-okno-vybora-fajlovpapki/
        With Application.FileDialog(msoFileDialogFolderPicker)
            If .Show = False Then
                Exit Function
            End If
            sFilePath = .SelectedItems(1)
        End With
    End If
 
    If Right(sFilePath, 1) <> "" Then sFilePath = sFilePath & ""
    'проверяем есть ли файл с таким же именем в выбранной папке
    If Dir(sFilePath & sFileName, 16) = "" Then
        'файла нет - скачиваем
        h = DownloadFileAPI(sFileURL, sFilePath & sFileName)
    Else
        'файл есть - запрос на перезапись
        If MsgBox("Этот файл уже существует в папке: " & sFilePath & vbNewLine & "Перезаписать?", vbYesNo, "www.excel-vba.ru") = vbYes Then
            'если существующий файл открыт - невозможно его перезаписать, показываем инф.окно
            'отменяем загрузку
            If IsBookOpen(sFileName) Then
                MsgBox "Невозможно сохранить файл в указанную папку, т.к. она уже содержит файл '" & sFileName & "' и этот файл открыт." & _
                    vbNewLine & "Закройте открытый файл и повторите попытку.", vbCritical, "www.excel-vba.ru"
            Else
                h = DownloadFileAPI(sFileURL, sFilePath & sFileName)
            End If
        End If
    End If
    CallDownload = h
End Function
 
'функция скачивания файла в выбранную папку
Function DownloadFileAPI(sFileURL, ToPathName)
'   sFileURL   - ссылка URL для скачивания файла
'   ToPathName - полный путь с именем файла для сохранения
 
    Dim h
    Dim sFilePath As String
    Dim sFileName As String
    'вызов функции API для непосредственно скачивания
    h = (URLDownloadToFile(0, sFileURL, ToPathName, 0, 0) = 0)
    'если h = False - файл не удалось скачать, показываем инф.окно
    If h = False Then
        MsgBox "Невозможно скачать файл." & vbNewLine & _
                "Возможно, у Вас нет прав на создание файлов в выбранной директории." & vbNewLine & _
                "Попробуйте выбрать другую папку для сохранения", vbInformation, "www.excel-vba.ru"
                Exit Function
    Else 'файл успешно скачан
            sFileName = Dir(ToPathName, 16)
            sFilePath = Replace(ToPathName, sFileName, "")
            If MsgBox("Файл сохранен в папку: " & sFilePath & _
                              vbNewLine & "Открыть файл сейчас?", vbYesNo, "www.excel-vba.ru") = vbYes Then
                If IsBookOpen(sFileName) Then
                    MsgBox "Файл с именем '" & sFileName & "' уже открыт. Закройте открытый файл и повторите попытку.", vbCritical, "www.excel-vba.ru"
                Else
                    Workbooks.Open ToPathName
                End If
            End If
    End If
    DownloadFileAPI = h
End Function
'Функция проверки - открыта ли книга с заданным именем
'подробнее:
'        http://www.excel-vba.ru/chto-umeet-excel/kak-proverit-otkryta-li-kniga/
Function IsBookOpen(wbName As String) As Boolean
    Dim wbBook As Workbook
    For Each wbBook In Workbooks
        If Windows(wbBook.Name).Visible Then
            If wbBook.Name = wbName Then IsBookOpen = True: Exit For
        End If
    Next wbBook
End Function

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

Основная функция, отвечающая за непосредственно скачивание — это функция API(Application Programming Interface) URLDownloadToFile. Она объявлена в самом верху кода. Там есть страшные директивы вроде #If Win64 Then. Это особые директивы, которые работают даже вне процедур. Поэтому не надо удивляться, что они вне всяких Sub и тем более не надо эти Sub-ы добавлять. При этом так же не надо удивляться, если какие-то из строк внутри этих директив будут подсвечены компилятором VBA красным шрифтом. На функциональность это не повлияет.

Вызов скачивания файла происходит обычным обращением к функции CallDownload. Например, есть ссылка для скачивания: http://www.excel-vba.ru/files/book.xls. И сохранить надо под именем «Книга1.xls». Вызываем функцию скачивания файла:

Sub DownloadFile()
    Call CallDownload("http://www.excel-vba.ru/files/book.xls", "Книга1.xls") 'вызываем скачивание файла
End Sub

Функция сама запросит папку для сохранения файла и после скачивания предложит открыть этот файл. Если такой файл уже есть — будет предложено его перезаписать.
К статье приложен файл, в котором код чуть расширен — он позволяет скачивать файлы сразу из множества ячеек, проставляя при этом признак — скачан файл или нет. И если сразу весь список обработать не получилось и какие-то файлы остались не скачанные(например, имена совпадали, а заменять файлы не надо было), то в этом случае можно будет повторно запустить код и скачиваться будут лишь те, у которых статус не является «Скачан!».
Так же т.к. ячеек много, перед скачиванием файлов будет выбор — запрашивать ли открытие файлов после скачивания или нет. Если открывать не надо, следует ответить Нет. Тогда файлы просто будут скачаны в указанную папку. Однако, если в этой папке будут расположены файлы с идентичными именами — запрос на перезапись все же появится, при этом для каждого файла. Если подобный запрос так же мешает, то надо этот блок:

    'проверяем есть ли файл с таким же именем в выбранной папке
    If Dir(sFilePath & sFileName, 16) = "" Then
        'файла нет - скачиваем
        h = DownloadFileAPI(sFileURL, sFilePath & sFileName)
    Else
        'файл есть - запрос на перезапись
        If MsgBox("Этот файл уже существует в папке: " & sFilePath & vbNewLine & "Перезаписать?", vbYesNo, "www.excel-vba.ru") = vbYes Then
            'если существующий файл открыт - невозможно его перезаписать, показываем инф.окно
            'отменяем загрузку
            If IsBookOpen(sFileName) Then
                MsgBox "Невозможно сохранить файл в указанную папку, т.к. она уже содержит файл '" & sFileName & "' и этот файл открыт." & _
                    vbNewLine & "Закройте открытый файл и повторите попытку.", vbCritical, "www.excel-vba.ru"
            Else
                h = DownloadFileAPI(sFileURL, sFilePath & sFileName)
            End If
        End If
    End If

заменить на всего одну строку:

h = DownloadFileAPI(sFileURL, sFilePath & sFileName)

Но при этом надо помнить — что при этом можно потерять какие-то важные файлы. Поэтому подобные вещи вы делаете на свой страх и риск.

Однако следует помнить одну вещь: не все сайты вот так запросто разрешают скачивать с них файлы, тем более пачками. Особенно это актуально для всякого рода форексов и иже с ними. Возможно, получится скачать один, два, три — десять файлов. Но всегда может случиться так, что сайт просто заблокирует ваш IP до конца дня, т.к. на сайте установлено ограничение на автоматизированное обращение извне. При этом для разных сайтов решение данной проблемы может быть различным и не всегда решаемым

Скачать файл

  Tips_Macro_DownloadFileFromURL.xls (64,0 KiB, 3 838 скачиваний)


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

выгрузка файлов в папку по гиперссылкам из Экслель

ovechkin1973

Дата: Среда, 26.12.2018, 13:35 |
Сообщение № 1

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Всем привет и с наступающим НГ!
Есть файл, в котором в определенном столбце гиперссылки на документы сделаны. Файл большой и документов тысячи. Файлы на которые сделаны гиперссылки разные (архивы, ворды, сканы ) и размещены в разных папках. Мне для отчета требуется предоставлять документы за определенный период и по типу документа. Отфильтровать это без проблем, а вот каким маркосом сканы, ворды, архивы можно в одну папку (по нужному мне пути) не представляю.
PS- папок в реальности больше и иногда в папке есть другие папки. Единственно — файл экслевский сохранен в папке, в которой лежат папки со всеми документами.

К сообщению приложен файл:

__.7z
(29.5 Kb)


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

 

Ответить

sboy

Дата: Среда, 26.12.2018, 14:30 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Добрый день.

Цитата

Объект FileSystemObject
CopyFile
Синтаксис:
CopyFile(<Source>,<Destination>,<Overwrite>)
Назначение:
Копирует один или несколько файлов.
Параметры:
<Source> — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
<Destination> — строка, путь назначения (куда копировать).
<Overwrite> — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).
Пример:
Set FSO = CreateObject(«Scripting.FileSystemObject»)
FSO.CopyFile «C:*.bat», «A:», 0


Яндекс: 410016850021169

 

Ответить

ovechkin1973

Дата: Среда, 26.12.2018, 15:19 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

sboy, спасибо.. Лично мне это не поможет. Мой уровень — это скопировать и что то через цикл в другом месте поискать. Но завтра попробую коллег озадачить, показав ваш ответ. Обычно, если им идею дать — то код от них нужный получаю.


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

 

Ответить

krosav4ig

Дата: Среда, 26.12.2018, 16:57 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

sboy, есть жеж FileCopy
[vba]

Код

Sub sdf()
    On Error Resume Next
    Dim cell As Range, sPath$, sNewPath$, sHref$
    sPath = ThisWorkbook.Path & «»
    sNewPath = sPath & «Отчет» & Format(Now, «dd.MM.yyyy hh_mm\»)
    MkDir sNewPath
    With ActiveSheet.UsedRange.Columns(«K»)
        For Each cell In Intersect(.Cells, .Offset(1)).SpecialCells(2, 23).SpecialCells(12).Cells
            sHref = cell.Hyperlinks(1).Address
            FileCopy sPath & sHref, sNewPath & Mid(sHref, InStrRev(sHref, «») + 1)
        Next
    End With
End Sub

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

sboy

Дата: Среда, 26.12.2018, 17:20 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010


Меньше нравится, т.к. при открытом файле даст ошибку (или пропустит копирование с resume next).


Яндекс: 410016850021169

 

Ответить

ovechkin1973

Дата: Среда, 26.12.2018, 17:25 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

krosav4ig, благодарю! На выложенном для примера файле код работает, а вот на родном — нет. Папку с отчетом делает, но она пустая.


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

 

Ответить

ovechkin1973

Дата: Четверг, 27.12.2018, 06:26 |
Сообщение № 7

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Нашел «косяк» в своем файле. По непонятным мне причинам гиперссылки макросом в моем файле почему то некоторые проставились со «» в имени пути, а не которые с «/». Знакомый эту проблему мне нашел и чуть код поправил.
[vba]

Код

Private Sub CommandButton1_Click() ‘ Выгрузка отчета со сканами
    On Error Resume Next
    Dim cell As Range, sPath$, sNewPath$, sHref$
    sPath = ThisWorkbook.path & «» ‘задаем путь сохранения
    sNewPath = sPath & «Отчет» & Format(Now, «dd.MM.yyyy hh_mm\»)
    MkDir sNewPath
    With ActiveSheet.UsedRange.Columns(«K»)
        For Each cell In Intersect(.Cells, .Offset(1)).SpecialCells(2, 23).SpecialCells(12).Cells
            sHref = cell.Hyperlinks(1).Address
            sHref = Replace(sHref, «/», «») ‘новая строка
            FileCopy sPath & sHref, sNewPath & Mid(sHref, InStrRev(sHref, «») + 1)
        Next
    End With
End Sub

[/vba]


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

 

Ответить

StoTisteg

Дата: Четверг, 27.12.2018, 11:40 |
Сообщение № 8

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

ovechkin1973, чтобы такого избегать, существует Application.PathSeparator.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

StoTisteg

Дата: Четверг, 27.12.2018, 11:45 |
Сообщение № 9

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

при открытом файле даст ошибку

Ну а FSO, можно подумать, скопирует.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

sboy

Дата: Четверг, 27.12.2018, 12:18 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Ну а FSO, можно подумать, скопирует.

можно подумать :)


Яндекс: 410016850021169

 

Ответить

StoTisteg

Дата: Четверг, 27.12.2018, 13:09 |
Сообщение № 11

Группа: Авторы

Ранг: Старожил

Сообщений: 1161


Репутация:

103

±

Замечаний:
0% ±


Excel 2010

Подумать-то можно… Только сдаётся мне, что FSO — это проводник, который тоже не особо любит копировать открытые файлы. Но это не точно, не проверял, сужу по описанию объекта.


Интуитивно понятный код — это когда интуитивно понятно, что это код.

 

Ответить

sboy

Дата: Четверг, 27.12.2018, 14:33 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Но это не точно, не проверял

А я проверял :)


Яндекс: 410016850021169

 

Ответить

ovechkin1973

Дата: Четверг, 27.12.2018, 15:19 |
Сообщение № 13

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

sboy, StoTisteg, УВАЖАЕМЫЕ! Благодарю за участие… но я в ваших ответах абсолютно не разбираюсь… После переделки кода макрос копирует в папку документы, но как оказалось тоже не все.. Примерно половину.. Что в предложенном коде нужно поменять?


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

 

Ответить

sboy

Дата: Четверг, 27.12.2018, 17:08 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010


а по ссылкам эти файлы (не скопировались которые) нормально открываются?


Яндекс: 410016850021169

 

Ответить

ovechkin1973

Дата: Четверг, 27.12.2018, 17:58 |
Сообщение № 15

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

а по ссылкам эти файлы (не скопировались которые) нормально открываются?

да.. открываются


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

 

Ответить

ovechkin1973

Дата: Суббота, 29.12.2018, 13:05 |
Сообщение № 16

Группа: Проверенные

Ранг: Обитатель

Сообщений: 429


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Люди! Прошу прощения! Проблема оказалась не в коде доработанном, а в том, что на сетевом диске, где файл и сканы хранятся- закончилось место… после изменения пути для сохранения отчета все стало ОК


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

 

Ответить

892o5588431

Дата: Среда, 06.07.2022, 19:15 |
Сообщение № 17

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Добрый день!
У меня была подобная задача, делал вставку макроса впервые. Всё сработало с таким кодом. с остальными создавало только пустую папку…

[vba]

Код

Sub sdf()
On Error Resume Next
Dim cell As Range, sPath$, sNewPath$, sHref$
sPath = ThisWorkbook.path & «» ‘задаем путь сохранения
sNewPath = sPath & «Отчет» & Format(Now, «dd.MM.yyyy hh_mm\»)
MkDir sNewPath
With ActiveSheet.UsedRange.Columns(«K»)
For Each cell In Intersect(.Cells, .Offset(1)).SpecialCells(2, 23).SpecialCells(12).Cells
sHref = cell.Hyperlinks(1).Address
sHref = Replace(sHref, «/», «») ‘новая строка
FileCopy sPath & sHref, sNewPath & Mid(sHref, InStrRev(sHref, «») + 1)
Next
End With
End Sub

[/vba]

Сообщение отредактировал Serge_007Четверг, 07.07.2022, 09:15

 

Ответить

 

Виталий

Пользователь

Сообщений: 256
Регистрация: 01.01.1970

Добрый день всем! Как написать макрос для автоматизации следующей задачи? Из колонки В по гиперссылке скачать фото на рабочий стол в папку «Фото» с именем из колонки А пять цифр — соответственно Коду товара. Таких позиций около тысячи и в ручную очень долго эту операцию делать.  Я понимаю, что это делается с помощью цикла, а как взаимодействовать с браузером и вообще возможно ли это?

Изменено: Виталий10.01.2016 16:52:34

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

Изменено: Андрей VG11.01.2016 05:00:15

 

Виталий

Пользователь

Сообщений: 256
Регистрация: 01.01.1970

Спасибо, я как раз это и нашел. Жаль что демо-версия на 5 запусков только.

 

Игорь

Пользователь

Сообщений: 3632
Регистрация: 23.12.2012

Какая демоверсия? какие 5 запусков?
Вам дали ссылку на бесплатный макрос, решающий вашу задачу
Возможно, надо только немного доработать макрос под вас (задав столбец с ссылками, и задав путь к папке с фото)

А ссылка на готовое решение (которое платное) — это на случай, если вам лень разбираться в коде, внося правки,
и вы хотите настроить все через интерфейс готовой программы.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#5

11.01.2016 16:35:36

При некотором желании можно сделать из без макроса ;)  Формируете часть html формулами

Код
="<tr><td><img src="""&Аркуш1!B12&"""></td></tr>"

Протягивая на всё количество изображений.
В блокноте делаете html файл со следующим содержанием.

Код
<html>
<head><title>for upload</title></head>
<body>
<table>
<!--Вставляете ниже этой строки всё что получили формулами-->
</table>
</body></html>

Сохраняете и открываете этот html-файл, например, в firefox. Выбираете в нём сохранить как и тип web-страница полностью. В подпапке for upload_files папки где сохранили страницу будут ваши файлы картинок.
Успехов.

 

Виталий

Пользователь

Сообщений: 256
Регистрация: 01.01.1970

Ух, ты прям волшебство какое-то. Спасибо огромное.

 

Даже проще — копируем столбец со ссылками, вставляем в Блокнот, копируем из Блокнота (чтобы в буфере обмена получился чистый текст). Запускаем

FlashGet

, он подхватывает ссылки из буфера обмена — поехали :)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#8

12.01.2016 05:26:49

оброе время суток.

Цитата
Казанский написал:
он подхватывает ссылки из буфера обмена — поехали

Алексей, мы не ищем уж совсем простых путей ;) . С другой стороны, Виталий теперь может смело сказать, что он начинающий web-разработчик :) — создана первая страница!

 

arvidservis

Пользователь

Сообщений: 9
Регистрация: 18.12.2016

#9

18.12.2016 21:31:56

Здравствуйте, Это в самом макросе вставляется код?

Понравилась статья? Поделить с друзьями:
  • Скачать форма 34002 скачать бланк excel
  • Скачать файл формата microsoft word
  • Скачать фоны для word 2007
  • Скачать файл товарной накладной в excel
  • Скачать фоны в формате word