VBA accroché sur ie.occupé et readystate vérifier

Je suis en train d'essayer d'attraper un joueur de football de données à partir d'un site web pour combler un usage privé de la base de données. J'ai inclus le code complet ci-dessous. Cette première section est un looper qui appelle la deuxième fonction à remplir une base de données. J'ai exécuter ce code dans MSAccess pour remplir une base de données, l'été dernier, et il a travaillé beaucoup.

Maintenant, je suis seulement de faire un peu d'équipes à remplir avant que le programme est accrochée à

While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend

J'ai cherché sur d'innombrables sites web concernant cette erreur et essayé de changer ce code, en mettant en sous-fonction d'attendre une période de secondes ou d'autres solutions de rechange. Aucun de ceux résoudre le problème. J'ai aussi essayé de lancer ce sur plusieurs ordinateurs.

Le premier ordinateur fait par le biais de 3 équipes (ou les trois appels de la 2ème fonction). La seconde plus lent ordinateur permet au travers de 5 équipes. Tous deux fini par accrocher. Le 1er ordinateur a Internet Explorer 10 et le second a IE8.

Sub Parse_NFL_RawSalaries()
  Status ("Importing NFL Salary Information.")
  Dim mydb As Database
  Dim teamdata As DAO.Recordset
  Dim i As Integer
  Dim j As Double

  Set mydb = CurrentDb()
  Set teamdata = mydb.OpenRecordset("TEAM")

  i = 1
  With teamdata
    Do Until .EOF
      Call Parse_Team_RawSalaries(teamdata![RotoworldTeam])
      .MoveNext
      i = i + 1
      j = i / 32
      Status("Importing NFL Salary Information. " & Str(Round(j * 100, 0)) & "% done")
    Loop
  End With


  teamdata.Close               ' reset variables
  Set teamdata = Nothing
  Set mydb = Nothing

  Status ("")                  'resets the status bar
End Sub

Deuxième fonction:

Function Parse_Team_RawSalaries(Team As String)
Dim mydb As Database
Dim rst As DAO.Recordset
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim TABLEelements As IHTMLElementCollection
Dim TRelements As IHTMLElementCollection
Dim TDelements As IHTMLElementCollection
Dim TABLEelement As Object
Dim TRelement As Object
Dim TDelement As HTMLTableCell
Dim c As Long
' open the table
Set mydb = CurrentDb()
Set rst = mydb.OpenRecordset("TempSalary")
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.navigate "http://www.rotoworld.com/teams/contracts/nfl/" & Team
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
Set HTMLdoc = IE.Document
Set TABLEelements = HTMLdoc.getElementsByTagName("Table")
For Each TABLEelement In TABLEelements
If TABLEelement.id = "cp1_tblContracts" Then
Set TRelements = TABLEelement.getElementsByTagName("TR")
For Each TRelement In TRelements
If TRelement.className <> "columnnames" Then
rst.AddNew
rst![Team] = Team
c = 0
Set TDelements = TRelement.getElementsByTagName("TD")
For Each TDelement In TDelements
Select Case c
Case 0
rst![Player] = Trim(TDelement.innerText)
Case 1
rst![position] = Trim(TDelement.innerText)
Case 2
rst![ContractTerms] = Trim(TDelement.innerText)
End Select
c = c + 1
Next TDelement
rst.Update
End If
Next TRelement
End If
Next TABLEelement
' reset variables
rst.Close
Set rst = Nothing
Set mydb = Nothing
IE.Quit
End Function
vérifier dans l'application du système du gestionnaire si IE.Quit parvient à fermer tous les IE application de manière efficace. Vous pourriez essayer de n'ouvrir qu'un seul IE application et de le passer en paramètre à ta fonction. Mon expérience de l'ouverture de IE processus qui prend du temps...

OriginalL'auteur Doubledown | 2013-07-05