Я, кажется, застрял в странной проблеме. У меня есть код Excel VBA ниже, чтобы посетить веб-сайт и ввести идентификатор пользователя (из столбца UserID A на листе 1) и получить имя пользователя, которое появляется после нажатия кнопки отправки, а затем продолжается с остальными идентификаторами пользователя.Excel VBA multiple Для цикла не работает
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
Проблема заключается в том, что код работает только один раз. Он вводит первый идентификатор пользователя в текстовое поле и отображает «Отправить». Когда он зацикливается и пытается ввести следующий идентификатор пользователя, код зацикливается в цикле.
Если я удаляю весь второй цикл For-Next, он работает (хотя он не отправляется, он вводит каждый из идентификаторов пользователя в текстовое поле).
Кроме того, если я использую F8, отлаживая код шаг за шагом, все работает нормально. Только получая проблемы при полностью выполнение кода. :(
Поместите 'Debug.Print CurRow' перед' Loop' и проверьте значение его дает в ближайшем окне. – Vityata
Он застрял в петле. CurRow всегда больше нуля. Каждый раз, когда он проходит, он запускает «Для каждого GetElem In Doc.getElementsByTagName (« ввод »)« снова и снова », поэтому он всегда будет отвечать первому экземпляру - каждый цикл. избавиться от цикла Do While CurRow> 0. Попробуйте сначала поместить все имена .query в массив, а затем использовать для i = lbound (myArray) для ubound (myArray) –
Я не понимаю :(Я вижу, что-то, и вы, возможно, видели проблему, но я почесываю голову здесь. Почему вы сказали, что CurRow всегда больше нуля? Я имею в виду, что CurRow начинается как лист 1.usedrange.rows.count, который равен 78, тогда он уменьшается на 1 каждый раз, когда он петли в цикле Do-While – jay