Vba 构建宏以将网站上的数据下载到Excel中

Vba 构建宏以将网站上的数据下载到Excel中,vba,excel,excel-2013,Vba,Excel,Excel 2013,我想使用VBA在Excel中构建一个宏,从以下网站下载历史数据: 我首先像往常一样创建一个命令按钮。然后我想,使用宏记录器可以很容易地解决这个问题。但是,当我选择Data->Get External Data->From Web,然后键入上述地址时,我无法选择整个表作为数据 因此,我不确定如何做这个任务,否则,但我觉得可能有一些标准代码的地方,我一直无法找到,以完成任务 我觉得这项任务对很多人来说都很有用,因为从网站下载数据的脚本可以在很多地方使用。这是因为看起来像一个表的东西实际上是一堆单行表

我想使用VBA在Excel中构建一个宏,从以下网站下载历史数据:

我首先像往常一样创建一个命令按钮。然后我想,使用宏记录器可以很容易地解决这个问题。但是,当我选择Data->Get External Data->From Web,然后键入上述地址时,我无法选择整个表作为数据

因此,我不确定如何做这个任务,否则,但我觉得可能有一些标准代码的地方,我一直无法找到,以完成任务


我觉得这项任务对很多人来说都很有用,因为从网站下载数据的脚本可以在很多地方使用。

这是因为看起来像一个表的东西实际上是一堆单行表,动态生成,当你向下滚动时,你可以看到它隐藏在>=8个级别中

使用例如Firefox和Inspect元素查看页面结构


因此,对于您想要执行的任务来说,此页面是一个特别糟糕的示例。

您可以尝试从可打印版本的表下载该表,而不是尝试下载动态表。可打印表格的URL为

大宗报价

和VBA

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://quickstats.nass.usda.gov/data/printable/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C" _
    , Destination:=Range("$F$10"))

我可以下载带有宏的表格。

使用VBA从网站获取数据的方法很多。您可以使用InternetExplorer对象导航到它,并在到达后解析HTML。您还可以使用MSXML2.XMLHTTP创建HTTP请求。尤其是Excel有许多数据链接选项可以实现这一点

然而,在这里,我将使用UDSA为您提供的工具,并在一行中完成:

Workbooks.Open ("http://quickstats.nass.usda.gov/data/spreadsheet/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C.csv")
编辑:为了回答下面的问题,这里有一些代码可以将该工作簿中的数据复制到现有工作簿中

Dim thisWb, downloadWb As Workbook
Set thisWb = ActiveWorkbook

Set downloadWb = Workbooks.Open("http://quickstats.nass.usda.gov/data/spreadsheet/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C.csv")

downloadWb.Worksheets(1).Range("A1:U2613").Copy Destination:=thisWb.Worksheets(1).Range("A2")

downloadWb.Close

当然,您需要更改范围等,以匹配所需的数据。

您链接的页面有一个指向开发人员资源的链接。你查过了吗?是的,我不想使用他们的API,我宁愿自己在VBA中使用,因为从网站下载数据的概念更普遍适用。我希望下层选民也能留下评论解释原因。在没有任何反对票的情况下,你经常被抛在脑后。1你是在暗示我最初的思维过程在其他情况下也会起作用吗?2你知道克服这一页问题的方法吗?1原则上是的。虽然我玩了一些包含表的维基百科页面,但我感觉QueryTables.AddConnection:=URL;。。。只适用于相当简单的页面。2是的。。。单击电子表格以获取整个表格的csv。我想,通过阅读页面是不会得到的,因为只有浏览器请求的部分是动态生成的。我喜欢这样,但我目前正在尝试如何修改它,以便将数据放入Excel中的命令按钮所在的工作表(即更改工作簿)。做某事else@sandstone有很多方法可以做到这一点。如果您只想获取所有数据,那么最简单的方法可能是将下载工作簿中的工作表中的所有数据复制到主工作簿中的工作表中。我已经用一些示例代码更新了答案。这对我不起作用…编译错误:预期以结束