Wie wird man warten, bis ein IE9-frame zu laden über VBA-excel?

Es gibt viele online-Ressourcen, die veranschaulichen die Verwendung von Microsoft Internet Explorer-Steuerelemente in VBA Excel um eine grundlegende IE-automation-Aufgaben. Diese große Arbeit, wenn die Webseite in Frage hat eine grundlegende Konstrukt. Allerdings, wenn Webseiten mit mehreren frames Sie können schwierig sein, mit zu arbeiten. Aktuell habe ich Probleme bei der Bestimmung, ob eine Person Rahmen innerhalb einer Webseite vollständig geladen wurde. Zum Beispiel... Dieses Excel-VBA-code öffnet den IE, lädt eine Webseite, Schleifen thur einem excel-sheet platzieren von Daten in der Webseite, Felder, führt die Suche, und gibt dann die IE Ergebnisse der Daten in excel (ich entschuldige mich für das weglassen der Website-Adresse). Die rub ist hier, dass die Ziel-Webseite enthält zwei frames:

1) Der Suchleiste.asp-frame für die Suche Wert-Eingabe und ausführen der Suche

2) Die searchresults.asp-frame für die Anzeige von Suchergebnissen

In diesem Konstrukt die search bar ist statisch, während die Ergebnisse der Suche ändern sich je nach input-Kriterien. Weil die Webseite ist gebaut auf diese Weise, die IEApp.ReadyState-und IEApp.Beschäftigt nicht verwendet werden, um zu bestimmen, IEfr1 frame laden, Abschluss, wie Sie diese Eigenschaften ändern sich nicht nach der ersten Suche.asp-laden. Daher verwende ich eine große statische Wartezeit zu vermeiden, die runtime-Fehlern, die beim internet-Verkehr flucuates. Dieser code funktioniert schon, aber es ist lächerlich langsam... beachten Sie die 10 Sekunden warten, nachdem die cmdGO-Anweisung. Ich würde wirklich gerne verbessern die Leistung von diesem Prozess, indem Sie solide Logik, um zu bestimmen, welches Bild geladen Fortschritt.

Meine Frage ist - kennt jemand einen cleveren Weg, um zu bestimmen, ob eine autonome frame fertig geladen ist?

Dank,

~Z

' NOTE: you must add a VBA project reference to "Internet Explorer Controls"
' in order for this code to work
Dim IEapp As Object
Dim IEfr0 As Object
Dim IEfr1 As Object

' Set new IE instance
Set IEapp = New InternetExplorer

' With IE object
With IEapp
    ' Make visible on desktop
    .Visible = True
    ' Load target webpage
    .Navigate "http://www.MyTargetWebpage.com/search.asp"
    ' Loop until IE finishes loading
    While .ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Wend
End With

' Set the searchbar.asp frame0
Set IEfr0 = IEapp.Document.frames(0).Document 

' For each row in my worksheet
For i = 1 To 9999                

    ' Input search values into IEfr0 (frame0)
    IEfr0.getElementById("SearchVal1").Value = Cells(i, 5)
    IEfr0.getElementById("SearchVal2").Value = Cells(i, 6)

    ' Execute search
    IEfr0.all("cmdGo").Click        

    ' Wait a fixed 10sec
    Application.Wait (Now() + TimeValue("00:00:10"))

    ' Set the searchresults.asp frame1
    Set IEfr1 = IEapp.Document.frames(1).Document

    ' Retrieve webpage results data
    Cells(i, 7) = Trim(IEfr1.all.Item(26).innerText)
    Cells(i, 8) = Trim(IEfr1.all.Item(35).innerText)

Next
  • Kannst du die aktuelle URL? Es ist schwer zu diagnostizieren, ohne es zu sein.
InformationsquelleAutor user1444796 | 2012-06-08
Schreibe einen Kommentar