Страницы: 1
RSS
Скачать вложения с сайта finance.yahoo.com последовательно по значениям таблицы
 
добрый день. возможно ли скачать вложение по адресу.
В  примере  в таблице Symbol перечислены символы и в таблице Period есть две даты для периода 1 и периода 2. вложения желательно сохранять по адресу C:\temp .
сам я макросы не пишу. могу только воспользоваться макросами. не могли бы написать макрос
с меня слова благодарности
 
Если честно, я вот даже не нашел попыток хотя бы создать ссылки на вложения для скачивания. Хотя все данные для этого вроде как есть. Я добавил в ячейку В4 формулу:
Код
="https://query1.finance.yahoo.com/v7/finance/download/"&[@Symbol]&"?period1="&$H$11&"&period2="&$H$12&"&interval=1d&events=history&crumb=K58cARccDnI"
А далее останется дело за малым: Как скачать файл из интернета по ссылке
Чутка подстраиваете под себя код из файла по ссылке и после небольших правок(чтобы ссылки брались из нужных ячеек) этот блок:
Код
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
меняете на такую строку:
Код
sFilePath = range("Таблица2").Cells(1,1).value
чтобы путь для сохранения всегда брался из ячейки.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, здравствуйте. спасибо за Ваши труды
что я делаю не так?! в файле с сайта вставил ссылки, но ничего не вышло. по совету с коммента изменил файл и опять не сработало. прикреплю файл
а вообще, есть что нибудь по легче кодом. может, я чего то не понимаю, но у меня сработало и так:
Код
Sub zzzz1()
    sFilePath = Range("Table2").Cells(1, 2).Value
    With CreateObject("WScript.Shell")
        .Run sFilePath
    End With
    Application.Wait Time:=Now + TimeValue("0:00:03")
End Sub
Sub zzzz2()
    sFilePath = Range("Table2").Cells(2, 2).Value
    With CreateObject("WScript.Shell")
        .Run sFilePath
    End With
    Application.Wait Time:=Now + TimeValue("0:00:03")
End Sub
Sub zzzz3()
    sFilePath = Range("Table2").Cells(3, 2).Value
    With CreateObject("WScript.Shell")
        .Run sFilePath
    End With
    Application.Wait Time:=Now + TimeValue("0:00:03")
End Sub
Sub zzzz4()
    sFilePath = Range("Table2").Cells(4, 2).Value
    With CreateObject("WScript.Shell")
        .Run sFilePath
    End With
    Application.Wait Time:=Now + TimeValue("0:00:03")
End Sub
Sub zzzz5()
    sFilePath = Range("Table2").Cells(5, 2).Value
    With CreateObject("WScript.Shell")
        .Run sFilePath
    End With
    Application.Wait Time:=Now + TimeValue("0:00:03")
End Sub
Sub a()
zzzz1
zzzz2
zzzz3
zzzz4
zzzz5
End Sub

только как задать папку для загрузки и все это записать в цикле(чтоб под каждую ссылку макрос не плодить) - не знаю
 
Цитата
artyrH написал:
есть что нибудь по легче кодом.
Для загрузки файла достаточно одной строки кода (обращение к UrlDownloadToFile). Если это API не работает, то попробуйте скачать файл непосредственно с помощью Internet Explorer - проблема, скорее всего, в настройках этой программы.
Владимир
 
Цитата
sokol92 написал:
скачать файл непосредственно с помощью Internet Explorer - проблема, скорее всего, в настройках этой программы
при попытке скачать по ссылке Explorer предлагает выбор: открыть или сохранить.
браузер по умолчанию - гугл хром просто скачивает без предложений выбора между сохранить или открыть
 
Сохраняйте - если даст ошибку, то и API не отработает. Для этого случая есть и другие способы, например, здесь.
Изменено: sokol92 - 12.05.2019 16:08:58
Владимир
 
далее предлагает выбор папки для сохранения. после выбора не реагирует на кнопку сохранить.
по предложенной ссылке еще не переходил
 
Укажите любое имя локального файла, например "aaa.txt".
Владимир
 
sokol92, функцией  DownloadFile можно скачать только по одной ссылке. как скачать несколько ссылок за раз( циклом) ?
 
Цитата
sokol92 написал:
любое имя локального файла, например "aaa.txt"
среагировало на кнопку сохранить, но, цитирую, не удалось скачать этот файл. поменял на csv - не сработало  
 
Только один файл. Пример со скачиванием множества файлов здесь.
Владимир
 
Цитата
artyrH написал:
не удалось скачать этот файл
Посмотрите содержимое файлов, которые скачались Вашими макросами в #3 - они, скорее всего, содержат сообщение об ошибке.
Владимир
 
Цитата
sokol92 написал:
они, скорее всего, содержат сообщение об ошибке
нет, ошибок нет . как бы циклом одним из этих макросов закачивать?
 
Цитата
sokol92 написал:
Пример со скачиванием множества файлов  здесь .
попробовал, выделив диапазон с ссылками, макросом из #20 скачать. ничего не произошло, только в левом нижнем углу, где обычно написано готово и имеется кнопка для записи макроса, появилось слово False. у меня диапазон со ссылками находится в колонке b.
 
Мы уже ранее в этой теме выяснили, что для Ваших ссылок API UrlDownloadToFile не годится. Может быть, Ваш случай вроде этого.  Я, увы, не могу помочь.
Владимир
 
sokol92, спасибо. можно еще два вопроса
сколько строк можно записать в один модуль vba?
есть ли возможность код макроса записать в одну строку?
то есть не так
Код
Sub zzzz1()
    sFilePath = Range("Table2").Cells(1, 2).Value
    With CreateObject("WScript.Shell")
        .Run sFilePath
    End With
    Application.Wait Time:=Now + TimeValue("0:00:03")
End Sub

а так
Код
Sub zzzz1()   sFilePath = Range("Table2").Cells(1, 2).Value  With CreateObject("WScript.Shell")     .Run sFilePath  End With Application.Wait Time:=Now + TimeValue("0:00:03")End Sub
 
По VBA литература обширна. Мне нравятся с методической точки зрения статьи на сайте Дмитрия Щербакова.
Технические ограничения на длину строки текста, на объем модуля VBA есть, но я за все годы работы с этим не сталкивался.

Для разделения строк кода можно использовать двоеточие.
Владимир
 
sokol92, спасибо
Код
Sub zzzz1():   sFilePath = Range("Table2").Cells(1, 2).Value:   With CreateObject("WScript.Shell"): .Run sFilePath:    End With: Application.Wait Time:=Now + TimeValue("0:00:03"): End Sub
работает)
Страницы: 1
Наверх