Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-如何从网站下载.xls并将数据放入excel文件_Vba_Excel_Web - Fatal编程技术网

VBA-如何从网站下载.xls并将数据放入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

我设法使用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 = 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对象库导致的确切问题吗?