簡體   English   中英

將數據從網頁(列表)下載到Excel

[英]Downloading data from a web page (list) to an Excel

我必須從這里下載數據:

[ http://www.bcra.gov.ar/PublicacionesEstadisticas/Evolucion_moneda.asp][1]

然后,我必須將所有數據保存在Excel中。 問題是我必須選擇幾種日期和幾種貨幣。 例如,我必須選擇12/31/2018,Dolar,Euro和Pesos。 而且,我必須一次選擇一種貨幣,並且有很多可供下載。 我嘗試使用Excel導入外部數據,但是沒有用。

我也嘗試過使用此VBA代碼

Sub descarga_monedas()

Fecha = "2018.06.05"
Moneda = 313

Path = "http://www.bcra.gob.ar/PublicacionesEstadisticas/Evolucion_moneda_3.asp?tipo=E&Fecha=" & Fecha & "&Moneda=" & Moneda & """"

Application.Workbooks.Open (Path)

End Sub

該頁面似乎阻止了此類代碼。

有什么辦法解決這個問題?

您可以按照以下方式進行操作。 我已經獲取了所有日期,但只包含了一個日期,可以與所有貨幣一起使用。 在日期上添加另一個外部循環以添加日期值,即在inputDates集合上使用外部循環獲取每個日期。

Option Explicit  
Public Sub GetData()
    Dim  body As String, html As HTMLDocument, http As Object, i As Long
    Dim codes As Object, inputCurrency As Object, inputDates As Object, dates As Object
    Const BASE_URL As String = "http://www.bcra.gov.ar/PublicacionesEstadisticas/Evolucion_moneda_3.asp?tipo=E&"
    Set codes = CreateObject("scripting.dictionary")
    Set inputDates = New Collection
    Set html = New HTMLDocument                  '<== VBE > Tools > References > Microsoft HTML Object library
    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "GET", "http://www.bcra.gov.ar/PublicacionesEstadisticas/Evolucion_moneda.asp", False
        .send
        html.body.innerHTML = .responseText

        Set inputCurrency = html.querySelectorAll("[name=Moneda] option[value]")
        Set dates = html.querySelectorAll("[name=Fecha] option[value]")
        For i = 0 To inputCurrency.Length - 1
            codes(inputCurrency.item(i).innerText) = inputCurrency.item(i).Value
        Next
        For i = 0 To dates.Length - 1
            inputDates.Add dates.item(i).Value
        Next

        Dim fecha As String, moneda As String, key As Variant, downloadURL As String
        Dim clipboard As Object, ws As Worksheet

        Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

        For Each key In codes.keys
            DoEvents
            fecha = inputDates.item(1) '<== use an outer loop over inputDates collection to get each date
            moneda = key
            downloadURL = BASE_URL & "Fecha=" & fecha & "&Moneda=" & moneda '2019.02.11 ,79

            .Open "GET", downloadURL, False
            .send
            html.body.innerHTML = StrConv(http.responseBody, vbUnicode)

            clipboard.SetText html.querySelector("table").outerHTML
            clipboard.PutInClipboard

            Set ws = ThisWorkbook.Worksheets.Add
            ws.NAME = fecha & "_" & moneda
            ws.Cells(1, 1).PasteSpecial
        Next
    End With
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM