简体   繁体   中英

Excel VBA multiple For loop not working

I seem to be stuck in an weird issue. I have the Excel VBA code below to visit a website and enter a userID (from the userID column A in sheet 1) and retrieve the name of the user which shows up after hitting the submit button then continues with the rest of the userIDs.

Public Sub TEST()
TestPage = "http://test.com/"

Dim IE As New InternetExplorer
Dim Doc As HTMLDocument
Dim GetElem As Object
Dim GetElem2 As Object

IE.Visible = True
IE.navigate TestPage
Do
    DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Application.Wait (Now + TimeValue("0:00:04"))

Set Doc = IE.document
CurRow = Sheet1.UsedRange.Rows.Count

Do While CurRow > 0
    Application.Wait (Now + TimeValue("0:00:4"))

    'Find/Get the userID textbox and enter the current userID
    For Each GetElem In Doc.getElementsByTagName("input")
        If GetElem.ID = "query" Then 'I could just do getElementByID later
            GetElem.Value = Sheet1.Range("A" & CurRow).Value
        End If
    Next

    'Find and click the submit button        
    For Each GetElem2 In Doc.getElementsByTagName("button")
        If GetElem2.Type = "submit" Then
            GetElem2.Click
            Application.Wait (Now + TimeValue("0:00:03"))
        End If
    Next
    CurRow = CurRow - 1
Loop
End Sub 

The problem is the code works only once. It enters the first userID into the text box and hits Submit. When it loops and tries to enter the next userID though, the code get stuck in a loop.

If I remove the entire 2nd For-Next loop it works (although it doesn't submit, it enters each of the userIDs in the text box).

On top of that, if I use the F8 debugging the code step by step, everything works fine. Only getting problems when fully running the code.:(

Public Sub TEST()
TestPage = "http://test.com/"

Dim IE As New InternetExplorer
Dim Doc As HTMLDocument
Dim GetElem As Object
Dim GetElem2 As Object

IE.Visible = True
IE.navigate TestPage
Do
    DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Application.Wait (Now + TimeValue("0:00:04"))

Set Doc = IE.document
CurRow = Sheet1.UsedRange.Rows.Count

    For Each GetElem In Doc.getElementsByTagName("input")
        If GetElem.ID = "query" Then 'I could just do getElementByID later
            GetElem.Value = Sheet1.Range("A" & CurRow).Value
            For Each GetElem2 In Doc.getElementsByTagName("button")
                If GetElem2.Type = "submit" Then
                    GetElem2.Click
                    Application.Wait (Now + TimeValue("0:00:03"))
                End If
            Next GetElem2
        End If
        CurRow = CurRow + 1
    Next GetElem

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM