Страницы: 1
RSS
Как сохранить файл по ссылке с помощью VBA
 
Добрый вечер,

Подскажите пожалуйста, вот нашел пример в интернете, как сохранить файл на жетский диск с помощью VBA, вот пример кода и он полностью рабочий, но вот проблема, он работает, только если ссылка ведет прямо к файлу, но если ссылка ведет не сразу к файлу, а при переходе по ссылке появляется меню типа "сохранить как/открыть", то ничего не скачивается.
В случае с прямой ссылкой XMLHTTP.statustext = OK, в случая с косвенной ссылкой XMLHTTP.statustext = пустой, подскажите пожалуйста, какой запрос надо послать, что сохранить подобные файлы ?
Код
Sub Save_file()
Dim XMLHTTP As Object
Dim ADOStream As Object
Dim FileName, Papka_Save$, URLka$

On Error Resume Next

    URLka = "https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Microsoft_Excel_2013_logo.svg/110px-Microsoft_Excel_2013_logo.svg.png"
    Papka_Save = "C:\план\"
    FileName = CreateObject("Scripting.FileSystemObject").GetFileName(URLka)
 
 
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
    XMLHTTP.Open "GET", URLka, "False"
    XMLHTTP.send
    
    Status_xml = XMLHTTP.statustext 
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
        Set ADOStream = CreateObject("ADODB.Stream")
        ADOStream.Type = 1: ADOStream.Open
        ADOStream.Write XMLHTTP.responseBody
 
        ADOStream.SaveToFile Papka_Save & FileName, 2
        ADOStream.Close: Set ADOStream = Nothing

End Sub
 
Ссылку на такой файл можно? У вас скорее всего страница, а не ссылка на файл из которой переадресовывается на скачку файла.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
http://www.rossvyaz.ru/docs/articles/ABC-3x.csv
Хотя если просто открыть эту ссылку в хроме, то сохранение происходит без "менюшки". Но код на XMLHTTP.send все равно нет ответа получается.
 
У вас идёт перенаправление по ссылке
https://rossvyaz.gov.ru/docs/articles/ABC-3x.csv
Если вы вставите её, то файл загружается успешно.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
А какую ссылку необходимо вставить ? Если ту, что я указал, то у меня не работает к сожалению.
 
Я же указал какую в #4
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Извините "gov" не заметил.
 
Здравствуйте,

Заметил какую то странную вещь, VBA якобы сохраняет файл по указанной ссылке, но только в первый раз, потом если даже сеть отключить от их как буто бы тоже сохраняет, но берет файлы точно не с интернета!

Не знаю в чем разница, но помогла замена с Microsoft.XMLHTTP на WinHttp.WinHttpRequest.5.1.
 
Здравствуйте еще раз!

А вот еще одну вещь заметил неприятную :(

На одной компе работает только Set XMLHTTP1 = CreateObject("Microsoft.XMLHTTP"), если использовать WinHttp.WinHttpRequest.5.1, то просто сохраняется пустой файл,
а на другом работает и Set XMLHTTP1 = CreateObject("Microsoft.XMLHTTP") и Set XMLHTTP1 = CreateObject("WinHttp.WinHttpRequest.5.1."), но при Microsoft.XMLHTTP - идет кеширование файлов.

Подскажите пожалуйста,если вдруг кто знает, что все это значит.
Изменено: Sanchos_bop - 25.12.2018 11:34:56
 
Sanchos_bop, используйте данный заголовок для сброса кэша(после Open)
Код
XMLHTTP.SetRequestHeader "If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 UTC"
 
Работает!
Спасибо!
 
Цитата
У вас идёт перенаправление по ссылке
А подскажите пожалуйста, а как Вы получили данную ссылку ?
Страницы: 1
Наверх