作者MashiroX421 (三峰真白)
標題Re: [問題] IE自動關閉Alert?
時間Tue Jul 5 12:32:55 2016
: 可是有些網頁Alert在原始檔找不到,所以無法用以上方式關閉,造成VBA無法繼續.
: 例如上面的javascript如果我沒有去改內容,
: 就會造成alert發生時,因為還沒關掉,
: 所以下一句"window.print()"就還沒執行,
: 等於VBA的第四行FireEvent還沒執行完,
: 即便下面再加Sendkeys也無法點掉alert,
: VBA的執行就停在第四行...
這裡我改用VBA呼叫外部程式來處理,使用的軟體是AutoHotkey,檔案下載:
https://www.dropbox.com/sh/u4ab8ul2q9ltllt/AAAm4VuDqRBuPriKpOX7Uxi4a?dl=0
裡面有一個是含有JavaScript的網頁,具有列印功能
exe檔則是使用AutoHotkey編譯的程式,下載後可以直接使用不需安裝AutoHotkey
若不放心請到官網下載程式後複製下面的程式碼,再用附加的工具進行編譯
-----------------------------------------------------------------------------
^!a::
Sleep 2000
IfWinExist 網頁訊息
{
WinActivate
Send {Enter}
}
Sleep 2000
ifWinExist 列印
{
WinActivate
Send {Enter}
}
Return
^!a:這是啟動AutoHotkey程式的快速鍵,^是Ctrl,!是Alt,a就是a,即Ctrl + Alt + a
Sleep:等待多少時間後執行程式碼,單位是毫秒,在這裡就是2秒後執行
IfWinExist:判斷視窗是否存在,在IE11裡彈出的名稱
http://i.imgur.com/oNKGNpS.png
WinActivate:視窗啟用,讓Send找到目標視窗後按下Enter即可關掉(列印)視窗
-----------------------------------------------------------------------------
Sub IE11()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "C:\Users\Administrator\Desktop\test2.html"
Shell ("C:\Users\Administrator\Desktop\test1.exe")
' Do While objIE.Busy = True Or objIE.readyState <> 4
' DoEvents
' Loop
SendKeys "^%a" 'Ctrl+Alt+a,為AHK程式自行設定的快速鍵
'-----------------以下3種方式均可執行JavaScript--------------------
' objIE.document.getElementsByTagName("button")(0).Click
' objIE.navigate "JavaScript:alert("""請設定橫式列印""")"
objIE.document.parentWindow.execScript "myprint()"
'------------------------------------------------------------------
Cells(1, 1) = "完成"
End Sub
-----------------------------------------------------------------------------
先呼叫AutoHotkey程式,在背景先待機,接著等Do迴圈跑完網頁後,再執行Sendkeys送出
快速鍵來執行該程式的動作,但是會先等待2秒後才執行按鍵命令,因為Alert還沒跳出來
故先用一個緩衝時間作等待,此時VBA繼續執行網頁的JavaScript後會暫時凍結而不往下
2秒後AutoHotkey程式就會開始進行一連串動作,作完後,VBA就會繼續往下執行了
另外要注意的一點是每次要執行VBA前必須要先關閉AutoHotkey程式,否則它每次都會詢
問是否要用新程式來取代舊程式的執行
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.86.100
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1467693184.A.E92.html
→ Linkey: 和o707o7一樣,操作的網頁是公司內網,無法聯外 07/05 14:02
→ Linkey: 沒有權限安裝軟體,能用的就Excel 2003 07/05 14:04
→ Linkey: 這才是真的頭痛的地方,連google都沒有,只有office的help 07/05 14:05
那個程式可以直接執行不用裝AHK就是,不過如果連外也不行的話就沒辦法了
純粹要靠VBA的話可能可以用API,只是自己在測試的時候不管怎樣還是會被卡住Orz
※ 編輯: MashiroX421 (114.41.86.100), 07/05/2016 16:55:28