问题:我正在尝试自动保存文件(当页面底部出现以下IE栏时设法保存文件)
我的代码正在我的内部网上,单击此处和那里然后我点击"导出"按钮将从IE触发:
我没有设法找到一种自动保存文件的方法,因为(我认为)唯一的方式就是与这个"窗口进行交互"是使用SendKeys。 为了做到这一点,我必须激活"这个窗口(是的,我已经使用这段代码激活HTML抓取,但它不是活动窗口):
我尝试使用AppActivate
但由于某种原因它无法正常使用。
有两种选择可以通过这个障碍:
Application.SendKeys "%{S}"
到目前为止,我已经阅读了很多关于该主题的帖子,但没有一个在IE 11上为该问题提供了可操作的解决方案。
如果您想查看任何代码,请告诉我,我从不同的帖子中收集了很多不同的尝试,但这会大大增加这篇文章的篇幅。
答案 0 :(得分:0)
前端自动化是一项棘手的业务。很难找到始终的解决方案(那些讨厌的用户可以随意移动鼠标并单击按钮,从而破坏您的代码)。因为您从Intranet站点获取数据,这表明您组织中已存在所需的数据。如果可能的话(我知道它并非总是)从服务器/源系统获取数据,而不是通过UI。
AppActivate和SendKeys非常挑剔。因为url总是相同的,所以更好的方法是直接下载它。以下是基于另一个https://msdn.microsoft.com/en-us/library/system.string_Methods(v=vs.110).aspx的示例。
在运行代码之前,您需要添加两个引用:
在VBA IDE中,单击工具>> 引用... 并从列表中选择(原始答案不使用引用,而是使用后期绑定)。
' Downloads a file from a given URL.
' URL String URL to get file. Ex: http:\\MySite\MyFile.
' Path String Location to save file. Ex: C:\Myfile.csv.
' Requires: Microsoft XML, v6.0
' Requires: Microsoft ActiveX Data Objects 2.8 Library.
Sub DownloadURL(ByVal URL As String, ByVal Path As String)
Dim httpXML As XMLHTTP60 ' Used to download data.
Dim st As ADODB.Stream ' Used to write downloaded data to file system.
Set httpXML = New XMLHTTP60
' Request file.
httpXML.Open "GET", URL, False
httpXML.send
' Download response.
If httpXML.Status = 200 And httpXML.readyState = 4 Then
Set st = New ADODB.Stream
st.Open
st.Type = adTypeBinary
st.Write httpXML.responseBody
st.SaveToFile Path, adSaveCreateOverWrite
st.Close
Else
MsgBox "Something went wrong :(", vbCritical, "An error occured"
End If
End Sub