构建宏以将网站上的数据下载到 Excel
Building a Macro to Download Data off a Website into Excel
我想在 Excel 中构建一个宏,使用 VBA 从以下网站下载历史数据:
http://quickstats.nass.usda.gov/results/320F1D82-1064-30F1-809E-F77E509EC508
我首先像往常一样创建一个命令按钮。然后我认为这可以使用宏记录器轻松解决。但是,当我 select Data -> Get External Data -> From Web 然后输入上面的地址时,我无法 select table 作为一个整体作为数据。
因此,我不确定如何以其他方式完成此任务,但我觉得某处可能有一些标准代码,但我一直无法找到,以完成该任务。
我觉得这个任务对很多人都有用,因为从网站下载数据的脚本可以用在很多地方。
因为看起来像table的东西实际上是一堆单行的table,动态生成(向下滚动可以看到),埋在> = 8 级 <div>
.
使用例如Firefox 和 "Inspect element" 查看页面结构。
所以这个页面对于你想要完成的任务来说是一个特别糟糕的例子。
您可以尝试从 table 的 "printable" 版本下载 table,而不是尝试下载动态 table。原则 table table 的 URL 是;
Blockquote http://quickstats.nass.usda.gov/results/320F1D82-1064-30F1-809E-F77E509EC508
和 VBA;
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://quickstats.nass.usda.gov/data/printable/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C" _
, Destination:=Range("$F"))
我可以用宏下载 table。
使用 VBA 从网站获取数据的方法有很多种。您可以使用 InternetExplorer 对象导航到它并在到达那里后解析 HTML。您还可以使用 MSXML2.XMLHTTP 制作 HTTP 请求。 Excel 特别是有许多 data-link 选项可以做到这一点。
但是,在这里我将使用 UDSA 一直为您提供的工具,并在一行中完成:
Workbooks.Open ("http://quickstats.nass.usda.gov/data/spreadsheet/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C.csv")
编辑:为了回答下面 Sandstone 的问题,这里有一些代码可以将数据从该工作簿复制到您现有的工作簿中。
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
当然,您需要更改范围等以匹配您需要的数据。
我想在 Excel 中构建一个宏,使用 VBA 从以下网站下载历史数据:
http://quickstats.nass.usda.gov/results/320F1D82-1064-30F1-809E-F77E509EC508
我首先像往常一样创建一个命令按钮。然后我认为这可以使用宏记录器轻松解决。但是,当我 select Data -> Get External Data -> From Web 然后输入上面的地址时,我无法 select table 作为一个整体作为数据。
因此,我不确定如何以其他方式完成此任务,但我觉得某处可能有一些标准代码,但我一直无法找到,以完成该任务。
我觉得这个任务对很多人都有用,因为从网站下载数据的脚本可以用在很多地方。
因为看起来像table的东西实际上是一堆单行的table,动态生成(向下滚动可以看到),埋在> = 8 级 <div>
.
使用例如Firefox 和 "Inspect element" 查看页面结构。
所以这个页面对于你想要完成的任务来说是一个特别糟糕的例子。
您可以尝试从 table 的 "printable" 版本下载 table,而不是尝试下载动态 table。原则 table table 的 URL 是;
Blockquote http://quickstats.nass.usda.gov/results/320F1D82-1064-30F1-809E-F77E509EC508
和 VBA;
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://quickstats.nass.usda.gov/data/printable/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C" _
, Destination:=Range("$F"))
我可以用宏下载 table。
使用 VBA 从网站获取数据的方法有很多种。您可以使用 InternetExplorer 对象导航到它并在到达那里后解析 HTML。您还可以使用 MSXML2.XMLHTTP 制作 HTTP 请求。 Excel 特别是有许多 data-link 选项可以做到这一点。
但是,在这里我将使用 UDSA 一直为您提供的工具,并在一行中完成:
Workbooks.Open ("http://quickstats.nass.usda.gov/data/spreadsheet/4C43034A-0EAA-3171-B4FC-84CC95FC6E0C.csv")
编辑:为了回答下面 Sandstone 的问题,这里有一些代码可以将数据从该工作簿复制到您现有的工作簿中。
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
当然,您需要更改范围等以匹配您需要的数据。