Скачать и переименовать файл с URL через макрос в Excel - PullRequest
2 голосов
/ 11 декабря 2019

Мне нужно скачать список ссылок на изображения в Dropbox и переименовать файлы с новым именем.

Чего я хочу добиться, это если я добавлю новое имя файла в одну ячейку и ссылку вдругой должен загрузить файл, переименовать его и сохранить по пути к файлу, указанному в ПУТИ ФАЙЛА для сохранения. Если при загрузке изображения возникнет ошибка, статус будет обновлен в ячейке состояния.

Например:

enter image description here

Iбудет использовать этот макрос в MS Office профессиональный плюс 2016 64-разрядная версия Win 10.

Я пытаюсь использовать приведенный ниже макрос, но он не сохраняет образ:

Option Explicit

Private 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

Dim Ret As Long

'~~> This is where the images will be saved. Change as applicable
Const FolderName As String = "C:\Temp\"

Sub Sample()
    Dim ws As Worksheet
    Dim LastRow As Long, i As Long
    Dim strPath As String

    '~~> Name of the sheet which has the list
    Set ws = Sheets("Sheet1")

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRow '<~~ 2 because row 1 has headers
        strPath = FolderName & ws.Range("A" & i).Value & ".jpg"

        Ret = URLDownloadToFile(0, ws.Range("B" & i).Value, strPath, 0, 0)

        If Ret = 0 Then
            ws.Range("C" & i).Value = "File successfully downloaded"
        Else
            ws.Range("C" & i).Value = "Unable to download the file"
        End If
    Next i
End Sub

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 11 декабря 2019

Может быть проблема с объявлением функции для 64 бит. Попробуйте

#If Win64 Then
    Private 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
    Private 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

Обновление : если загрузка не удалась, функция возвращает код ошибки. Однако, если файл может быть загружен, но не может быть записан локально (например, неверное имя файла, нет разрешения на запись ...), функция возвращает 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...