浏览网站

时间:2017-11-08 14:21:02

标签: excel-vba internet-explorer vba excel

我的代码能够与它带来的第一个网页进行互动,但是一旦我离开它,我的代码就会给我一个' 424'对象所需的错误。这是一个例子。

EX:去yahoo.com - 搜索地球' - 单击Yahoo徽标返回雅虎主页

Sub InternetPractice()

Dim ie As InternetExplorer

Set ie = New InternetExplorer

ie.Visible = True

ie.navigate "https://www.yahoo.com"

Do While ie.Busy = True Or ie.readyState <> 4: DoEvents: Loop

ie.document.getElementById("uh-search-box").Value = "Earth"
ie.document.getElementById("uh-search-button").Click


Do While ie.Busy = True Or ie.readyState <> 4: DoEvents: Loop

ie.document.getElementById("logo").Click

End Sub

在互联网上使用VBA对我来说是新的,任何帮助都表示赞赏!

1 个答案:

答案 0 :(得分:1)

编辑:

我认为你没有足够的时间来装载...它对我有用。 因此,您可以尝试使用此代码,以便在中止之前提供更多时间并尝试加载3次。

Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub InternetPractice2()


    Dim IE As InternetExplorer
    Dim HTMLDoc As HTMLDocument
    Dim logo As Object
    Dim n As Long
    Set IE = New InternetExplorer                'Set IE = CreateObject("InternetExplorer.Application")

    With IE
        .Silent = True
        .Visible = True
        .Navigate "https://www.yahoo.com"
    End With

    WaitIE IE, 5000

    Set HTMLDoc = IE.Document
    HTMLDoc.getElementById("uh-search-box").Value = "Earth"
    HTMLDoc.getElementById("uh-search-button").Click

load:
    WaitIE IE, 10000
    Set logo = HTMLDoc.getElementById("logo")
    If Not logo Is Nothing Then
        logo.Click
    ElseIf logo Is Nothing And n < 4 Then
        n = n + 1
        GoTo load
    End If
    WaitIE IE, 5000

    'Set ie to Nothing
    IE.Quit
    Set IE = Nothing
End Sub
Sub WaitIE(IE As Object, Optional time As Long = 250)
'Code from: https://stackoverflow.com/questions/33808000/run-time-error-91-object-variable-or-with-block-variable-not-set
Dim i As Long
Do
    Sleep time
    Debug.Print CStr(i) & vbTab & "Ready: " & CStr(IE.READYSTATE = 4) & _
                vbCrLf & vbTab & "Busy: " & CStr(IE.Busy)
    i = i + 1
Loop Until IE.READYSTATE = 4 Or Not IE.Busy
End Sub

原始答案

尝试关闭,即在代码的末尾添加一些延迟,因为如果你用F8步进代码,你会发现它有效:

Sub InternetPractice2()

Dim ie As InternetExplorer

Set ie = New InternetExplorer

ie.Visible = True

ie.navigate "https://www.yahoo.com"

Do While ie.Busy = True Or ie.READYSTATE <> 4: DoEvents: Loop

ie.Document.getElementById("uh-search-box").Value = "Earth"
ie.Document.getElementById("uh-search-button").Click
'Add delay After .Click

Do While ie.Busy = True Or ie.READYSTATE <> 4: DoEvents: Loop
Application.wait Now+Timevalue("00:00:05")

ie.Document.getElementById("logo").Click
'Set ie to Nothing
Set ie = Nothing
End Sub

同时关闭Windows任务管理器上的所有iexplorer.exe。