从URL [Excel VBA]

时间:2016-04-26 09:31:02

标签: excel excel-vba internet-explorer vba

我进行了大量搜索,但未找到我想要的内容。到目前为止,我对VBA的了解只限于操纵数字,所以这对我来说是个新领域。

我正在尝试从以下网址LINK中提取单行数据。完成后,我可以解析这些数据,但我们将跨越那座桥......

以下是Excel VBA中的代码:

Enum READYSTATE
    READYSTATE_UNINITIALIZED = 0
    READYSTATE_LOADING = 1
    READYSTATE_LOADED = 2
    READYSTATE_INTERACTIVE = 3
    READYSTATE_COMPLETE = 4
End Enum

Sub ImportStackOverflowData()

    Dim ie As InternetExplorer

    Dim html As HTMLDocument

    Set ie = New InternetExplorer

    ie.Visible = False
    ie.navigate "http://api.rsbuddy.com/grandExchange?a=guidePrice&i=1637"

    Do While ie.READYSTATE <> READYSTATE_COMPLETE
        DoEvents
    Loop

    'show text of HTML document returned
    Set html = ie.document.body
    MsgBox html.DocumentElement.innerHTML

    'close down IE and reset status bar
    Set ie = Nothing
    Application.StatusBar = ""

End Sub

导航到网址后,IE下载窗口打开,并要求我打开或保存.json文件...点击任何内容会导致代码崩溃,忽略它会将代码保留在它下面的READYSTATE循环中。

如何阻止它打开此窗口,而是将信息插入工作簿?

谢谢。

1 个答案:

答案 0 :(得分:1)

绕过那个盒子并不简单,如果你搜索,有很多很多关于它的帖子。它变得特别复杂,因为某些版本的IE以不同的方式运行(使用下载功能区而不是对话框)。

要按照您的方式执行此操作,您需要使用Windows API来获取下载窗口的句柄并将其关闭。这很快变得非常复杂。

然而,有一种更简单的方式;不要将Internet Explorer用于简单请求。使用更轻松的东西,我在这里使用MSXML,但您可以将其与WINHTTP交换。

Sub ImportStackOverflowData()

    Dim request As Object
    Set request = CreateObject("MSXML2.XMLHTTP")

    With request
        .Open "GET", "http://api.rsbuddy.com/grandExchange?a=guidePrice&i=1637", False
        .send
        MsgBox .responseText
    End With

End Sub