2015-09-03 2 views
1

J'ai le code suivant dans VBA qui ouvre une page IE, la remplit puis clique sur un bouton qui ouvre une nouvelle fenêtre IE. Cependant, mon code n'est pas capable de remplir la première liste déroulante de la nouvelle fenêtre. Toute aide serait grandement appréciée.Web Scraper ne remplira pas une fenêtre enfant que mon code VBA lance

Sub Van() 

Dim IE As Object 
Dim IE2 As Object 

Set IE = CreateObject("InternetExplorer.Application") 
'Set IE2 = CreateObject("InternetExplorer.Application") 

IE.navigate ("website") 

IE.Visible = True 

Do 
DoEvents 
Loop Until IE.readystate = 4 

Set d = IE.document 

'Code now clicks on buttons or dropdowns etc 


Application.Wait (Now + TimeValue("00:00:03")) 



Set IE2 = GetIE("pop-up page") 

WaitFor IE2 

'Tried this too 
'Application.Wait (Now + TimeValue("00:00:05")) 
IE2.document.getElementsByTagName("select")(0).Value = "X" 


'Also tried the line below 
'IE2.document.GetElementsbyname("name")(0).SelectedIndex = 1 


End Sub 

Function GetIE(sAddress As String) As Object 

Dim objShell As Object, objShellWindows As Object, o As Object 
Dim retVal As Object, sURL As String 


Set retVal = Nothing 
Set objShell = CreateObject("Shell.Application") 
Set objShellWindows = objShell.Windows 

'see if IE is already open 
For Each o In objShellWindows 
sURL = "" 
On Error Resume Next 
sURL = o.LocationURL 
On Error GoTo 0 
If sURL <> "" Then 
'MsgBox sURL 
If sURL = sAddress Then 
Set retVal = o 
Exit For 
End If 
End If 
Next o 

Set GetIE = retVal 
End Function 


Sub WaitFor(IE) 
Do 
DoEvents 
Loop Until IE.readystate = 4 
End Sub 
+0

Avez-vous vraiment ces espaces après la '' dans l'URL vous passez? à 'GetIE'? –

+0

Non, désolé, c'est juste la façon dont j'ai copié par erreur ici - Je vais le modifier – chris

Répondre

1

La page dans la fenêtre pop-up ne peut pas être complètement chargé lorsque vous essayez d'accéder à la sélection - essayez d'ajouter une boucle d'attente jusqu'à ce que le chargement se fait. J'aime sortir la boucle « attendre » dans une nouvelle fonction utile:

Set IE2 = GetIE("https://secure.apia.com.au/NASApp/apia/CRQuoteServlet?" & _ 
       "pageAction=openModelSelectionWindow&currentSequenceNumber=") 

WaitFor IE2 

IE2.document.getElementsByTagName("select")(0).Value = "JAY" 

WaitFor:

Sub WaitFor(IE) 
    Do 
     DoEvents 
    Loop Until IE.readystate = 4 
End sub 
+0

Merci Tim - Il ne fonctionne toujours pas pour une raison quelconque. J'ai modifié mon code (voir mon article original qui a été modifié). J'ai aussi essayé de mettre dans mon habituel, moins élégant 'Application.Wait (Now + TimeValue (" 00:00:05 "))' type de délai et cela ne semble pas fonctionner non plus. Le MsgBox ''MsgBox sURL' montre l'URL correcte une fois que le commentaire est enlevé ainsi il semble que le code de la fonction fonctionne bien au moins ce point (et ainsi peut-être que la fonction" échoue "à faire quelque chose après cela, telle que le délai ou le temps d'attente est quelque peu redondant)? – chris

+0

Quelle erreur obtenez-vous? –

+0

À ce stade, si je "un-commentaire" le MsgBox, je viens d'obtenir l'URL de la pop-up dans un MsgBox. Après avoir cliqué sur "OK", rien d'autre ne se passe. Si je commente à nouveau MsgBox, la fenêtre contextuelle est générée comme d'habitude, la liste déroulante n'est pas remplie et aucune erreur n'est générée. – chris