SendKeys 的活动 IE 11 window
Active IE 11 window for SendKeys
问题:我正在尝试自动保存文件(当页面底部出现以下IE栏时设法保存文件)
我的代码在我的 Intranet 上运行,点击这里和那里,然后我点击一个 "Export" 按钮,它会从 IE 触发:
我没能找到自动保存文件的方法,因为(我认为)与此 "window" 交互的唯一方法是使用 SendKeys。
为了做到这一点,我必须 "activate" 这个 window (是的,我用这段代码激活了 HTML 抓取,但它不是活动的 window虽然):
我尝试使用 AppActivate
但由于某些原因它不起作用。
有2个选项可以通过这个障碍:
- 想办法激活包含那个保存栏的 IE window,这样我就可以在上面使用
Application.SendKeys "%{S}"
- (仅第二个选项):禁用此保存栏或设法在新的 window
中打开它
到目前为止,我已经讨论了很多关于该主题的 post,但 none 为 IE 11 上的该问题提供了一个可操作的解决方案。
如果您想查看任何代码,请告诉我,我从不同的 post 收集了很多不同的尝试,但这会大大增加此 post 的长度。
前端自动化是一项棘手的工作。确实很难找到 总是 有效的解决方案(那些讨厌的用户可以随意移动鼠标和单击按钮,从而破坏您的代码)。因为您是从内部网站获取数据,这表明您需要的数据已经存在于您的组织中。如果可能的话(我知道并非总是如此)从 servers/source 系统获取数据,而不是通过 UI.
AppActivate 和 SendKeys 可能非常繁琐。因为 url 总是相同的,所以更好的方法是直接下载它。这是一个基于另一个 answer.
的示例
在您可以 运行 代码之前,您需要添加两个引用:
- 微软 XML, v6.0
- Microsoft ActiveX 数据对象 2.8 库
从 VBA IDE 单击 工具 >> 参考... 和 select 来自列表(原始答案不使用引用,而是使用后期绑定)。
' 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
问题:我正在尝试自动保存文件(当页面底部出现以下IE栏时设法保存文件)
我的代码在我的 Intranet 上运行,点击这里和那里,然后我点击一个 "Export" 按钮,它会从 IE 触发:
我没能找到自动保存文件的方法,因为(我认为)与此 "window" 交互的唯一方法是使用 SendKeys。
为了做到这一点,我必须 "activate" 这个 window (是的,我用这段代码激活了 HTML 抓取,但它不是活动的 window虽然):
我尝试使用 AppActivate
但由于某些原因它不起作用。
有2个选项可以通过这个障碍:
- 想办法激活包含那个保存栏的 IE window,这样我就可以在上面使用
Application.SendKeys "%{S}"
- (仅第二个选项):禁用此保存栏或设法在新的 window 中打开它
到目前为止,我已经讨论了很多关于该主题的 post,但 none 为 IE 11 上的该问题提供了一个可操作的解决方案。
如果您想查看任何代码,请告诉我,我从不同的 post 收集了很多不同的尝试,但这会大大增加此 post 的长度。
前端自动化是一项棘手的工作。确实很难找到 总是 有效的解决方案(那些讨厌的用户可以随意移动鼠标和单击按钮,从而破坏您的代码)。因为您是从内部网站获取数据,这表明您需要的数据已经存在于您的组织中。如果可能的话(我知道并非总是如此)从 servers/source 系统获取数据,而不是通过 UI.
AppActivate 和 SendKeys 可能非常繁琐。因为 url 总是相同的,所以更好的方法是直接下载它。这是一个基于另一个 answer.
的示例在您可以 运行 代码之前,您需要添加两个引用:
- 微软 XML, v6.0
- Microsoft ActiveX 数据对象 2.8 库
从 VBA IDE 单击 工具 >> 参考... 和 select 来自列表(原始答案不使用引用,而是使用后期绑定)。
' 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