VBA-如何从网站下载.xls并将数据放入excel文件
我设法使用VBA实现了从web下载excel文件的目的,但我很难弄清楚如何实际下载该文件并将其内容放入我正在使用的excel文件中。有什么建议吗?谢谢 以下是迄今为止的代码:VBA-如何从网站下载.xls并将数据放入excel文件,vba,excel,web,Vba,Excel,Web,我设法使用VBA实现了从web下载excel文件的目的,但我很难弄清楚如何实际下载该文件并将其内容放入我正在使用的excel文件中。有什么建议吗?谢谢 以下是迄今为止的代码: Sub GetData() Dim IE As InternetExplorer Dim HTMLDoc As HTMLDocument Dim objElement As HTMLObjectElement Set IE = New InternetExplorer With IE .Visible = Tr
Sub GetData()
Dim IE As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim objElement As HTMLObjectElement
Set IE = New InternetExplorer
With IE
.Visible = True
.Navigate "http://www.housepriceindex.ca/default.aspx"
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: Wend
.Document.getElementById("lnkTelecharger2").Click
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: Wend
Set HTMLDoc = .Document
Set objElement = HTMLDoc.getElementById("txtEmailDisclaimerEN")
objElement.Value = "abc@abc.com"
Set objElement = HTMLDoc.getElementById("lnkAcceptDisclaimerEN")
objElement.Click
' ... Get CSV somehow ...
'.Quit
End With
Set IE = Nothing
End Sub
Sub-GetData()
Dim IE作为InternetExplorer
将HTMLDoc设置为HTMLDocument
作为HTMLObjectElement的Dim对象元素
Set IE=新的InternetExplorer
与IE
.Visible=True
.导航“http://www.housepriceindex.ca/default.aspx"
当.Busy或.ReadyState ReadyState_完成时:Wend
.Document.getElementById(“lnkTelecharger2”)。单击
当.Busy或.ReadyState ReadyState_完成时:Wend
设置HTMLDoc=.Document
Set-objElement=HTMLDoc.getElementById(“txtEmailDisclaimerEN”)
objElement.Value=”abc@abc.com"
Set-objElement=HTMLDoc.getElementById(“lnkAcceptDisclaimerEN”)
对象。单击
' ... 以某种方式获得CSV。。。
”“退出
以
设置IE=无
端接头
尝试以下代码:
Option Explicit
Sub ImportHistoricalDataSheet()
Const SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056
Const adSaveCreateOverWrite = 2
Dim aBody, sPath
' Download Historical Data xls file via XHR
With CreateObject("MSXML2.XMLHTTP")
'With CreateObject("MSXML2.ServerXMLHTTP")
'.SetOption 2, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
.Open "GET", "http://www.housepriceindex.ca/Excel2.aspx?langue=EN&mail=abc%40abc.com"
.Send
' Get binary response content
aBody = .responseBody
' Retrieve filename from headers and concatenate full path
sPath = ThisWorkbook.Path & "\" & Replace(Split(Split(.GetAllResponseHeaders, "filename=", 2)(1), vbCrLf, 2)(0), "/", "-")
End With
' Save binary content to the xls file
With CreateObject("ADODB.Stream")
.Type = 1
.Open
.Write aBody
.SaveToFile sPath, adSaveCreateOverWrite
.Close
End With
' Open saved workbook
With Workbooks.Open(sPath, , True)
' Get 1st worksheet values to array
aBody = .Worksheets(1).UsedRange.Value
.Saved = True
.Close
End With
' Delete saved workbook file
CreateObject("Scripting.FileSystemObject").DeleteFile sPath, True
' Insert array to target worksheet
ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Resize(UBound(aBody, 1), UBound(aBody, 2)).Value = aBody
End Sub
您可以使用列表对象,从CSV创建数据表,并将CSV绑定到列表对象。或者简单地根据csv文件读取并设置单元格内容,您能告诉我如何使用代码执行此操作吗?谢谢这太棒了!我该如何让它更新同一张表而不是创建一张全新的表(因为我打算创建链接和图表,这会使它变得更容易)。@rageAgains机器我更改代码只是为了更新
Sheet1
上的值。代码工作得很好,一件小事:我如何让代码在多个版本的excel(2007和2013)中工作。导致问题的是excel 12.0和15.0对象库。我研究过“后期绑定”,但不确定如何将其应用到代码中。谢谢你advance@RageAgainstheMachine代码中有很多后期绑定,您能描述一下Excel对象库导致的确切问题吗?