从URL中检索数据[Excel VBA]

问题描述:

我已经广泛搜索,但没有找到我要找的内容。我对VBA的知识迄今仅限于操纵数字,所以这对我来说是一个新的领域。从URL中检索数据[Excel VBA]

我试图从下面的URL LINK拉单行数据。一旦做到这一点,我可以分析这些数据的工作,但我们会船到桥头......

这里是Excel VBA至今代码:

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

Sub Import*Data() 

    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 

导航到URL后, IE下载窗口打开,并要求我打开或保存.json文件...单击任何东西崩溃代码,并忽略它将代码保留在它下面的READYSTATE循环中。

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

谢谢。

+0

从我的理解(这可能是错误的),该网站的内容正在下载,因为从服务器发送标头。这是你无法控制的东西。如果您手动导航到该网站,您是否仍然收到下载提示?只是一个侧面说明,看到你显然有一个IE对象库的引用,你不需要在你的模块的顶部创建'ReadyState'枚举。 –

+0

谢谢,这是我遵循的指南的一部分。将删除它。 另外,这是由于IE无法原生显示.json的问题?我应该切换到另一个浏览器吗? – User9123

+0

嗨,很抱歉,我在与您的编辑同时发表评论。 在chrome或firefox中打开URL会显示一行文字。在IE中打开,它试图保存文件... – User9123

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

要做到这一点,您需要使用Windows API来获取下载窗口的句柄并将其解除。这很快就会变得非常复杂。

然而,有一种更简单的方法;请勿使用Internet Explorer进行简单的请求。使用更轻的东西,我在这里使用MSXML,但是你可以用WINHTTP替换它。

Sub Import*Data() 

    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 
+0

简单的解决方案和很好的解释。 +1 –

+0

感谢Kyle的回应,这很有道理。 刚试过你的方法,它挂在“.send”上,最终返回一个运行时错误“-2147012894”自动化错误。 我是否缺少参考? – User9123

+0

@ User9123,不,WinHTTP可能需要根据您的特定网络配置进行一些调整。尝试修改后的代码 – SWa