iT邦幫忙

0

VBA 如何判斷網頁 [檔案下載] 視窗是否已彈出

過去發問文章https://ithelp.ithome.com.tw/questions/10188801
目前使用以下語法執行網頁檔案下載均正常,但目前遇到問題為:
因為[檔案下載]視窗彈出的等待時間長短不固定,有時候很快約10秒,有時候卻要等到1分鐘以上。
主要是因為公司的系統問題,導致每次設好延遲時間,都會因為太快或太慢向下繼續執行,而造成下載連線異常導致下載失敗。

所以想請問在以下延遲時間(回應[如何處理]視窗)那段延遲2秒的語法,是否有辦法改為判斷檔案下載視窗是否已彈出,再繼續往下執行的語法呢?有這種解決辦法嗎?

Sub 查詢每日數據並下載檔案()
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
.Visible = True
.Navigate "http://xxxxxxxxxxxx/xxx.aspx" '查詢數據網址
Do Until .ReadyState = READYSTATE_COMPLETE
DoEvents
Loop

	.Navigate "http://10.178.1.140:8023/ReportPage/ReportAgentToDay_28_tptv.aspx" '查詢數據會自動產生於此網址頁面
	Do Until .ReadyState = READYSTATE_COMPLETE
		DoEvents
	Loop

	.document.forms(0).all("ctl00_btnDownload").Click '點選下載按鈕
End With

** ' 回應[如何處理]視窗
Application.Wait Now + TimeValue("0:00:2") '延遲2秒**
Application.SendKeys "%{A}" ' 按[另存新檔]鍵

' 回應[另存新檔]視窗
Application.Wait Now + TimeValue("0:00:2") '延遲2秒
Application.SendKeys "%{N}"     ' <alt-N> 選取[檔案名稱]欄位
Application.SendKeys "{HOME}" & ThisWorkbook.Path & "\"  ' 設定存檔路徑
Application.SendKeys "%{S}"     ' <alt-S> 按[存檔]鍵

' 回應[確認另存新檔]視窗
Application.Wait Now + TimeValue("0:00:2") '延遲2秒
Application.SendKeys "%{Y}"     ' <alt-Y> 按[是]鍵 (如果同名檔已經存在)

' 回應[檢視下載]視窗
Application.Wait Now + TimeValue("0:00:5") '延遲5秒
Application.SendKeys "%{C}"     ' <alt-C> 按[關閉]鍵

myIE.Quit
Set myIE = Nothing

End Sub

1 個回答

0
來杯拿鐵
iT邦新手 4 級 ‧ 2018-12-14 20:24:27
最佳解答

要等下載視窗跳出 來
http://www.vbaexpress.com/forum/archive/index.php/t-22575.html
這個網頁有提到類似問題

我要發表回答

立即登入回答