使用InternetExplorer对象的Excel VBA下载文件

时间:2018-01-25 12:19:48

标签: excel excel-vba vba

所以我有一个VBA代码,目前已成功登录网站并进一步导航到网站的其他页面并抓取我需要的数据。

我现在需要导航到一个页面(没问题),用查询填充文本框(没问题)并点击“下载”按钮(没问题)。然后,这会提示弹出窗口下载文件(打开/保存/取消)。我的要求是在没有用户交互的情况下保存此文件 - 宏应该将文件保存在预定的目录中。

关于如何实现这一目标的任何想法?我根本无法让SendKeys工作。

Set appIE = New InternetExplorerMedium

sURL2 = "http://somewebsite.com/query.asp?"

With appIE
    .Navigate sURL2
    .Visible = True
End With

Do While appIE.Busy Or appIE.ReadyState <> 4
    DoEvents
Loop

'code to enter the query in textbox and click on download file button
    appIE.Document.getElementsByTagName("textarea")(0).Value = Sheets("UserEntry").Range("L37")
    appIE.Document.getElementsByName("btnSubmit")(203).Click
    Application.SendKeys "%{s}"

Set appIE = Nothing

编辑:即使我可以让SendKeys工作,我也需要自动“另存为”文件,而不只是将其“保存”在“下载”文件夹中。

1 个答案:

答案 0 :(得分:1)

好的,由于@BrownishMonster建议的方法

,让它工作了

我使用了WinHTTP.WinHTTPRequest.5.1

我还使用Fiddler调查浏览器在POST请求中发送的内容,然后让VBA执行相同的操作

Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

'This is to POST the login info and login to the site
WHTTP.Open "POST", mainUrl, False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.send loginString

'This is to POST the download info and download the file
WHTTP.Open "POST", fileUrl_XLSResult, False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.send downloadString

FileData = WHTTP.responseBody

'This is to save the file in the location MyFilePath
If WHTTP.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WHTTP.responseBody
    oStream.SaveToFile MyFilePath, 1
    oStream.Close
End If