Ich scheine in einem seltsamen Problem stecken. Ich habe den Excel VBA-Code unten, um eine Website zu besuchen und eine Benutzer-ID (aus der Benutzer-ID-Spalte A in Blatt 1) einzugeben und den Namen des Benutzers abzurufen, der nach dem Klicken auf die Schaltfläche "Senden" angezeigt wird. Anschließend werden die restlichen Benutzer-IDs fortgesetzt.Excel VBA mehrere For-Schleife funktioniert nicht
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
Das Problem ist der Code funktioniert nur einmal. Es gibt die erste Benutzer-ID in das Textfeld ein und drückt auf Senden. Wenn es jedoch eine Schleife ausführt und versucht, die nächste Benutzer-ID einzugeben, bleibt der Code in einer Schleife stecken.
Wenn ich die gesamte 2. For-Next-Schleife entfernt, funktioniert es (obwohl es nicht einreicht, gibt es jede der Benutzer-IDs in das Textfeld ein).
Obendrein, wenn ich den F8 Debugging des Codes Schritt für Schritt, alles funktioniert gut. Nur Probleme bekommen, wenn sie vollständig den Code ausgeführt wird. :(
Setzen Sie ein 'debug.print CurRow' vor dem' Loop' und prüfen Sie den Wert, den es in unmittelbaren Fenstern geben. – Vityata
Es wird in einer Schleife stecken. CurRow ist immer größer als 0. Jedes Mal, wenn es durchläuft, startet es das "For Each GetElem In Doc.getElementsByTagName (" input ")" - also wird es immer an die erste Instanz - jede Schleife - übergeben loswerden der Schleife Do While CurRow> 0. versuche, zuerst alle .query-Namen in ein Array zu schreiben und dann für i = lbound (myArray) zu ubound (myArray) –
Ich verstehe nicht :(Ich kann dich sehen ' Du hast das Problem vielleicht schon gesehen, aber ich kratze mir hier den Kopf. Warum hast du gesagt, CurRow ist immer größer als Null? Ich meine CurRow beginnt als Blatt 1.usedrange.rows.count was 78 ist, wird es jedes Mal um 1 reduziert, wenn es in der Do-While-Schleife eine Schleife bildet – jay