0

我正在编写一个宏来从雅虎获取当前汇率,但我无法将 html 字符串转换为 HTMLDocument 以允许我通过 id 搜索所需的元素。到目前为止,这是我的代码,但在 debug.print 行上失败了。

Public Sub Forex(currency1 As String, currency2 As String)

Dim oXHTTP As Object
Dim doc As HTMLDocument
Dim url As String
Dim html As String
Dim id As String

Set oXHTTP = CreateObject("MSXML2.XMLHTTP")

url = "http://finance.yahoo.com/q?s=" & currency1 & currency2 & "=X"

oXHTTP.Open "GET", url, False
oXHTTP.send

html = oXHTTP.responseText
Set oXHTTP = Nothing

Set doc = New HTMLDocument
doc.body.innerHTML = html

id = "yfs_l10_" & currency1 & currency2

Debug.Print doc.getElementById("id").innerText

End Sub

我在这里想念什么?

4

2 回答 2

4

我正在使用excel-vba-http-request-download-data-from-yahoo-finance 的方法:

Sub Forex(currency1 As String, currency2 As String)

    Dim url As String, html As String, id As String
    Dim oResult As Variant, oLine As Variant, sRate As String


    url = "http://finance.yahoo.com/q?s=" & currency1 & currency2 & "=X"
    id = "<span id=""yfs_l10_" & currency1 & currency2 & "=x"">"
    html = GetHTTPResult(url)

    oResult = Split(html, vbLf)
    For Each oLine In oResult
        If InStr(1, oLine, id, vbTextCompare) Then
            sRate = Split(Split(oLine, "<span id=""yfs_l10_audusd=x"">")(1), "</span>")(0)
            Exit For
        End If
    Next
End Sub

Function GetHTTPResult(sURL As String) As String
    Dim XMLHTTP As Variant, sResult As String

    Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    XMLHTTP.Open "GET", sURL, False
    XMLHTTP.send
    sResult = XMLHTTP.responseText
    Set XMLHTTP = Nothing
    GetHTTPResult = sResult
End Function
于 2013-09-02T07:36:23.430 回答
2

您快到了,只是 id 错误:

id = "yfs_l10_" & currency1 & currency2 & "=X"

Debug.Print doc.getElementById(id).innerText
于 2013-09-02T11:18:32.533 回答