SendKeys的活动IE 11窗口

时间:2017-04-12 11:48:42

标签: windows vba excel-vba internet-explorer sendkeys

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

我的代码正在我的内部网上,单击此处和那里然后我点击"导出"按钮将从IE触发:enter image description here

我没有设法找到一种自动保存文件的方法,因为(我认为)唯一的方式就是与这个"窗口进行交互"是使用SendKeys。 为了做到这一点,我必须激活"这个窗口(是的,我已经使用这段代码激活HTML抓取,但它不是活动窗口):enter image description here

我尝试使用AppActivate但由于某种原因它无法正常使用。

有两种选择可以通过这个障碍:

  • 找到一种方法来激活包含该保存栏的IE窗口,以便我可以使用Application.SendKeys "%{S}"
  • (仅限第二个选项):禁用此保存栏或设法在新窗口中打开它

到目前为止,我已经阅读了很多关于该主题的帖子,但没有一个在IE 11上为该问题提供了可操作的解决方案。

如果您想查看任何代码,请告诉我,我从不同的帖子中收集了很多不同的尝试,但这会大大增加这篇文章的篇幅。

1 个答案:

答案 0 :(得分:0)

前端自动化是一项棘手的业务。很难找到始终的解决方案(那些讨厌的用户可以随意移动鼠标并单击按钮,从而破坏您的代码)。因为您从Intranet站点获取数据,这表明您组织中已存在所需的数据。如果可能的话(我知道它并非总是)从服务器/源系统获取数据,而不是通过UI。

AppActivate和SendKeys非常挑剔。因为url总是相同的,所以更好的方法是直接下载它。以下是基于另一个https://msdn.microsoft.com/en-us/library/system.string_Methods(v=vs.110).aspx的示例。

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

  1. Microsoft XML,v6.0
  2. Microsoft ActiveX数据对象2.8库
  3. 在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