2017-04-12 87 views
0

問題:我想自動執行文件的保存(管理保存文件時,IE下欄出現在頁面的底部)主動IE 11窗口的SendKeys

我的代碼是怎麼回事在我的內部網上,點擊這裏和那裏,然後我點擊一個「導出」按鈕,這將從IE觸發這個:enter image description here

我沒有設法找到一種方法來自動保存文件,因爲唯一的方法(我認爲)與這個「窗口」交互的是使用SendKeys。 爲了做到這一點我必須「激活」窗口(是的,我把它激活了HTML與這段代碼刮,但它不是活動窗口雖然):enter image description here

我試着用AppActivate但由於某種原因它不起作用。

有2個選項來傳遞這個障礙:

  • 找到一種方法來激活包含儲蓄吧,這樣我就可以用它Application.SendKeys "%{S}"(僅第二個選項)
  • IE窗口:禁用這個節能酒吧或管理有它在新窗口中

到目前爲止,我已經通過大量的帖子在談論這個問題的開放了,但沒有放棄對這一問題的解決方案運行在IE 11

讓我知道如果你想看到任何代碼,我會從不同的帖子收集很多不同的嘗試,但這會大大增加這篇文章的長度。

+0

這可能是[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你想達到什麼目的?您的代碼的目的是從內部網站下載內容? –

+0

是的,我正在嘗試自動執行此.xls文件的下載過程,如上圖所示。我將更新帖子以使其更清晰 – Seb

+0

包含該保存欄的IE窗口是否總是具有相同的標題,位於IE徽標旁邊?下載是否始終具有相同的URL? –

回答

0

前端自動化是一項棘手的業務。可能很難找到一個解決方案,總是的作品(這些討厭的用戶可以隨意移動鼠標和點擊按鈕,破壞你的代碼)。因爲您正在從Intranet站點獲取數據,這表明您的組織中已經存在您需要的數據。如果可能(並且我知道它並不總是)從服務器/源系統獲取數據,而不是通過UI。

AppActivate和SendKeys可能非常挑剔。因爲url總是相同的,所以更好的方法是直接下載它。這是一個基於另一個answer的示例。

在可以運行的代碼,你將需要添加兩個引用:

  1. 微軟XML,V6.0
  2. Microsoft ActiveX數據對象2.8庫

從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 
+0

太好了!謝謝你。希望它永久地工作:) – Seb

+0

對不起所有的問題,但這種自動化更難以期望! –

+0

是的,我仍然很困惑。我再次嘗試發送F6 + Tab + Enter,但是這次使用'Application.Wait Now + TimeSerial(0,0,1)'前後,它也起作用...似乎是隨機的 – Seb