如何使用VBA在IE11中自动保存另存为对话框?
我想下载一些关于碳排放的数据。我可以通过URL预载相关设置的页面。 它加载正常,我可以点击确定按钮的ID,然后我得到IE11 - 打开/保存/取消对话在底部。我已经使用FindWindows(#32770)尝试了所有建议,并发送了非常不可靠的密钥。有人可以建议操纵这个对话框的代码,或者也许可以检查网页上的HTML以查看是否可以直接下载?如何使用VBA在IE11中自动保存另存为对话框?
Dim htm As Object
Dim IE As Object
Dim Doc As Object
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.navigate "http://ec.europa.eu/environment/ets/exportEntry.do?form=accountAll&permitIdentifier=&accountID=&installationIdentifier=&complianceStatus=&account.registryCodes=CY&primaryAuthRep=&searchType=account&identifierInReg=&mainActivityType=&buttonAction=&account.registryCode=&languageCode=en&installationName=&accountHolder=&accountStatus=&accountType=&action=®istryCode="
Do While IE.readystate <> 4: DoEvents: Loop
Set Doc = CreateObject("htmlfile")
Set Doc = IE.document
Doc.getelementbyID("btnOK").Click[embed=file 884739]
'I need code here which clicks the save as button as save the file as C:\temp.xml
Set IE = Nothing
考虑例如:
Option Explicit
Sub Test()
Dim strExportURL As String
Dim strFormData As Variant
Dim strContent As String
Dim arrRespBody() As Byte
' build exportURL parameter
strExportURL = Join(Array(_
"permitIdentifier=", _
"accountID=", _
"form=accountAll", _
"installationIdentifier=", _
"complianceStatus=", _
"account.registryCodes=CY", _
"primaryAuthRep=", _
"searchType=account", _
"identifierInReg=", _
"mainActivityType=", _
"buttonAction=", _
"account.registryCode=", _
"languageCode=en", _
"installationName=", _
"accountHolder=", _
"accountStatus=", _
"accountType=", _
"action=", _
"registryCode=" _
), "&")
' build the whole form data
strFormData = Join(Array(_
"languageCode=en", _
"exportURL=" & EncodeUriComponent(strExportURL), _
"form=accountAll", _
"exportType=1", _
"OK=Ok" _
), "&")
' POST XHR to retrieve the content
With CreateObject("Microsoft.XMLHTTP")
.Open "POST", "http://ec.europa.eu/environment/ets/export.do", False
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.Send strFormData
arrRespBody = .ResponseBody
' strRespText = .ResponseText
' strRespHeaders = .GetAllResponseHeaders
' strStatus = .Status
End With
' some processing examples
' convert to string
strContent = BinaryToText(arrRespBody, "utf-8")
' replace LF symbols with CRLF for line breaks to be displayed right
strContent = Replace(strContent, vbLf, vbCrLf)
' show in notepad
ShowInNotepad strContent
' save to temp.xml file on the desktop folder
SaveBinaryToFile arrRespBody, CreateObject("WScript.Shell").SpecialFolders.Item("Desktop") & "\temp.xml"
End Sub
Function EncodeUriComponent(sText)
With CreateObject("ScriptControl")
.Language = "JScript"
EncodeUriComponent = .Run("encodeURIComponent", sText)
End With
End Function
Sub ShowInNotepad(strToFile)
Dim strTempPath
With CreateObject("Scripting.FileSystemObject")
strTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & .GetTempName
With .CreateTextFile(strTempPath, True, True)
.WriteLine (strToFile)
.Close
End With
CreateObject("WScript.Shell").Run "notepad.exe " & strTempPath, 1, True
.DeleteFile (strTempPath)
End With
End Sub
Function BinaryToText(arrBytes() As Byte, strCharSet As String)
With CreateObject("ADODB.Stream")
.Type = 1 ' adTypeBinary
.Open
.Write arrBytes
.Position = 0
.Type = 2 ' adTypeText
.Charset = strCharSet
BinaryToText = .ReadText
.Close
End With
End Function
Sub SaveBinaryToFile(arrBytes() As Byte, strPath As String)
With CreateObject("ADODB.Stream")
.Type = 1 ' adTypeBinary
.Open
.Write arrBytes
.SaveToFile strPath, 2 ' adSaveCreateOverWrite
.Close
End With
End Sub
谢谢,它的工作! – Rahul
这只适用于XML文件,仅限于此URL。现在我需要给动态站点和下载excel文件并保存为选项(需要重命名)。你能给我一些想法吗?我正在使用IE 11 – Rahul
创建XHR没有常见的情况,每次你必须做一些逆向工程的工作,因为每个网站都有它自己特定的设计和功能。如果你还有一个链接,那么再创建一个问题。 – omegastripes
我已启动您的代码,页面返回的错误“99655条记录,超过3000预定限制请修改您的条件后再试。”没有开始下载。你能解决这个问题吗?另外请看[这种方法](http://stackoverflow.com/a/32429348/2165759)。 – omegastripes
HI亲爱的朋友,我使用工作网址更新了代码。请再次检查。感谢您的答复。 – Rahul