2017-05-30 169 views
0

代碼工作正常,但是當我試圖關閉IE瀏覽器,我得到以下錯誤:運行時錯誤91 - IE對象

"Run Time Error 91"

Dim IE As Object 
Dim shellWins As New ShellWindows 
Dim IE_URL As String 
Dim Row As Integer 

Row = 2 

For Each IE In shellWins 
    IE_URL = IE.LocationURL 
    If IE_URL <> vbNullString Then 
     Sheet1.Range("A" & Row) = IE_URL 
     row = Row + 1 
    End If 
Next 

Set shellWins = Nothing 
Set IE = Nothing 

IE.quit 

NEW CODE:

Dim shellWins As New ShellWindows 
Dim objIE As Object 
Dim objIE_TabURL As String 
Dim Rowcount As Long 

Rowcount = 2 

With objIE 

    Set objIE = CreateObject("InternetExplorer.Application") 

     For Each objIE In shellWins 

     objIE_TabURL = objIE.LocationURL 

      If objIE_TabURL <> vbNullString And InStr(objIE_TabURL,  
      "file://") = 0 Then 

       Rowcount = Rowcount + 1 
       sht2.Range("A" & Rowcount) = objIE_TabURL 

      End If 

     Next 

    objIE.Quit 

End With 

END NEW CODE

我嘗試從IE會話中打開的標籤中讀取URL以將其導出到工作表中。

我很抱歉,但我在VBA新手:-(

+2

您在退出之前設置IE = Nothing',因此您殺死了IE對象,之後您無法再訪問它。在設置'IE = Nothing'之前退出應該工作。 –

+2

@Peh實際上,「IE」甚至沒有設置爲循環之外的Internet Explorer實例,因此無法工作。 –

+1

@MacroMan你是完全正確的。只能看到與錯誤消息匹配的最終問題。 –

回答

1

IE實際上並沒有設置在任何一點的Internet Explorer的一個實例,你使用它作爲一個對象變種一旦循環完成,變量將超出範圍,因此無法以您想要的方式再次訪問。

如果要在檢索URL後關閉IE,請將您的代碼更改爲:

For Each IE In shellWins 
    IE_URL = IE.LocationURL 
    If IE_URL <> vbNullString Then 
     Sheet1.Range("A" & Row) = IE_URL 
     row = Row + 1 
     IE.Quit '// Close IE here, while the variable is still in scope 
    End If 
Next 

注意不需要Set IE = Nothing在您的例程結束時,VBA自動爲您管理內存。

+0

我嘗試使用您的代碼,但1個選項卡(和ie)仍然打開爲什麼? – Thomasvba

+0

您的代碼的邏輯意味着它只會關閉IE匹配您正在查找的URL的實例。如果要關閉所有IE窗口,則必須重新排列邏輯。 –

+0

意見? :-) – Thomasvba