首页 > 解决方案 > 如何使用 vba 从网页中的表值中正确提取内部文本?

问题描述

不幸的是,我的旧帐户在更改网站主机时被删除了。我在整个网站上寻找解决方案,但只发现人们处理整个表格,而不仅仅是试图获得一个值。我在从以下网页获取带有 innerText 的 Net Assets 时遇到问题:

https://finance.yahoo.com/quote/UMBWX?p=UMBWX

这是我的尝试:

Sub FetchAssets()
Dim HTML As New HTMLDocument, elem As Object, URL As String

    URL = https://finance.yahoo.com/quote/UMBWX?p=UMBWX
    With CreateObject("MSXML2.XMLHTTP")

            .Open "GET", URL, False
            Application.Wait Now + 1 / (24 * 60 * 60# * 2)
            .send
            Application.Wait Now + 1 / (24 * 60 * 60# * 2)
            HTML.body.innerHTML = .responseText
            
            Set elem = HTML.querySelector("NET_ASSETS-value")
            MsgBox elem.innerText
    End With
End Sub

这种尝试导致:Run-time error '91': Object variable or With block variable not set

我已经尝试了完全相同的代码并与之交换elem.innerTextelem.innerHTML它会导致相同的错误。错误发生在 MsgBox 代码行上,它设置 elem 很好。

由于我的声誉低于 10,我无法嵌入图像,但这是网页中的代码行:

<td class="Ta(end) Fw(600) Lh(14px)" data-test="NET_ASSETS-value" data-reactid="89"><span class="Trsdu(0.3s) " data-reactid="90">539.25M</span></td>

标签: javascripthtmlexcelvba

解决方案


试试这个

Sub FetchAssets()
    Dim html As New HTMLDocument, elem As Object, sURL As String
    sURL = "https://finance.yahoo.com/quote/UMBWX?p=UMBWX"
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", sURL, False
        .send
        html.body.innerHTML = .responseText
        Set elem = html.querySelector("td[data-test='NET_ASSETS-value']")
        MsgBox elem.innerText
    End With
End Sub

推荐阅读