SendKeys 的活动 IE 11 window

Active IE 11 window for SendKeys

问题:我正在尝试自动保存文件(当页面底部出现以下IE栏时设法保存文件)

我的代码在我的 Intranet 上运行,点击这里和那里,然后我点击一个 "Export" 按钮,它会从 IE 触发:

我没能找到自动保存文件的方法,因为(我认为)与此 "window" 交互的唯一方法是使用 SendKeys。 为了做到这一点,我必须 "activate" 这个 window (是的,我用这段代码激活了 HTML 抓取,但它不是活动的 window虽然):

我尝试使用 AppActivate 但由于某些原因它不起作用。

有2个选项可以通过这个障碍:

到目前为止,我已经讨论了很多关于该主题的 post,但 none 为 IE 11 上的该问题提供了一个可操作的解决方案。

如果您想查看任何代码,请告诉我,我从不同的 post 收集了很多不同的尝试,但这会大大增加此 post 的长度。

前端自动化是一项棘手的工作。确实很难找到 总是 有效的解决方案(那些讨厌的用户可以随意移动鼠标和单击按钮,从而破坏您的代码)。因为您是从内部网站获取数据,这表明您需要的数据已经存在于您的组织中。如果可能的话(我知道并非总是如此)从 servers/source 系统获取数据,而不是通过 UI.

A​​ppActivate 和 SendKeys 可能非常繁琐。因为 url 总是相同的,所以更好的方法是直接下载它。这是一个基于另一个 answer.

的示例

在您可以 运行 代码之前,您需要添加两个引用:

  1. 微软 XML, v6.0
  2. 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