iT邦幫忙

0

ie8正常但ie11無法執行

請問為何以下兩段不同程式碼在 ie8 均可正常執行,但 ie11 卻無反應(標示處),是否因為程式寫法不同或需要加入什麼物件呢?

Sub test()
Dim p As Object
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
.Visible = True
.Navigate "http://test/Default.aspx" '公司內網故無法提供真實網址

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

Set p = .Document.all.tags("INPUT") '無反應
.Document.all.txtUsername.innerText = "test" '無反應
.Document.all.txtPassword.innerText = "test" '無反應
.Document.all.ImageButton2.Click '無反應

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

End With
End Sub

Sub test()

Set myIE = CreateObject("InternetExplorer.Application")
With myIE
.Visible = True
.Navigate "http://test/Report_OMS/Reprt_Sale.aspx" '公司內網故無法提供真實網址

Do While Busy Or .ReadyState <> 4: DoEvents: Loop

.Document.all("ReportViewer1ctl01ctl05ctl00").Value = "Excel" '無反應

End With
End Sub

看更多先前的討論...收起先前的討論...
小魚 iT邦大師 1 級 ‧ 2018-06-06 11:55:52 檢舉
瀏覽器相容性問題,
沒有必要的話最好不要考慮ie8(含)以下的版本...
這個處理起來很麻煩...
paicheng0111 iT邦研究生 1 級 ‧ 2018-06-06 12:32:31 檢舉
你有試過用逐步執行來偵錯嗎?
@小魚 因為公司電腦只能使用IE8不能升級,可是最近使用筆電WIN10 IE11想要跑相同程式碼才發現不能跑的~

@pcw 剛使用逐步執行發現跑到等候網頁完成就出現異常訊息:
Do While Busy Or .ReadyState <> 4: DoEvents: Loop
出現「執行階段錯誤 '430':
物件類別不支援 automation 或預期的介面」

然後我把上面那段拿掉重跑,跑到Set p = .Document.all.tags("INPUT")出現以下錯誤
「執行階段錯誤 '-2147467259 (80004005)':
'Document'方法('IWebBrowser2'物件)失敗」

但以上程式碼在公司電腦用IE8都正常~~~~
Homura iT邦高手 1 級 ‧ 2018-06-06 14:23:39 檢舉
後端錯誤應該不是瀏覽器的問題吧?
不是應該是你IIS跑的環境設定要改嗎?
0
paicheng0111
iT邦研究生 1 級 ‧ 2018-06-06 14:59:47
最佳解答

這應該是IE 11有較高的安全性設定所致。

原因可以參考:

簡單的說,在執行Navigate方法之後,IE會在瞬間關閉後重開並連線到指定網址,導致myIE所指向的物件已經被消滅

上方的stackoverflow提供二種解法:

你的VBA我改寫如下:

Sub test()
    Dim p As Object, myIE as object, Shell as object, eachWindow as object
    
    Set myIE = CreateObject("InternetExplorer.Application")
    With myIE
        .Visible = True
        .Navigate "http://test/Default.aspx" '公司內網故無法提供真實網址
    End With
    
    ' 主要加入以下區塊
    ' ===============================
    If LCase(Typename(myIE)) = "object" then
        Set Shell = CreateObject("Shell.application")
            
        For Each eachWindow In Shell.Windows
            If instr(eachWindow.LocationURL, URL) <> 0 Then
                Set myIE = eachWindow
                Exit For
            End If
        Next eachWindow
    End If
    ' ===============================
    
    With myIE
        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop

        Set p = .Document.all.tags("INPUT")
        .Document.all.txtUsername.innerText = "test"
        .Document.all.txtPassword.innerText = "test"
        .Document.all.ImageButton2.Click

        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
    End With
End Sub

@pcw 謝謝,你好厲害喔~~~~~另外不知道我另外一個問題你是否有解呢?https://ithelp.ithome.com.tw/questions/10189485

0
untitled
iT邦新手 5 級 ‧ 2018-06-07 09:30:48

document.all指令太舊了
建議改用document.getelementsbyname或document.getelementsbyid

paicheng0111 iT邦研究生 1 級 ‧ 2018-06-07 11:49:51 檢舉

document.getelementsbyid應改為document.getelementbyid
因為id是唯一的,所以要用單數型element,而非複數型element s

untitled iT邦新手 5 級 ‧ 2018-06-12 13:04:30 檢舉

我key錯了~感謝!!

我要發表回答

立即登入回答