2010-10-09 3 views
0

Pour une raison quelconque, j'essaie d'analyser ce site Web: http://www.vblandrecords.com/index.aspx. J'essaie actuellement de cliquer sur l'onglet Document type, puis de changer la valeur From date.Modification de données dans un problème iFrame enfant - impossible d'obtenir un objet DOM

Je supposé que je aurais pu le faire avec le code suivant, en VBA:

Option Explicit 
Public WithEvents ieObj As InternetExplorer 

Public Sub Launch() 

    Set ieObj = CreateObject("InternetExplorer.Application") 
    ieObj.Visible = True 
    ieObj.navigate ("http://www.vblandrecords.com/index.aspx") 

    While ieObj.readyState <> READYSTATE_COMPLETE 

    Wend 

    Dim TmpDOMObj, Frame As Object 

    Set TmpDOMObj = ieObj.document.getElementById("tbMaintd3") 

    TmpDOMObj.Click 

    Set Frame = ieObj.document.getElementById("tbMain_frame3") 
    Set TmpDOMObj = Frame.contentWindow.document.getElementById("txtStart") 

    TmpDOMObj.Value = "10/1/2010"  

End Sub 

Mais, je suis une erreur d'exécution 91 - variable objet non définie. J'ai fait quelques recherches et il est apparu que la structure arborescente sous tbMain_frame3 ne se forme qu'après avoir cliqué sur l'onglet tbMaind3, et je le vois dans les outils de développement MSIE, mais je ne le vois pas dans mon script.

Je pensais que c'était lié à des problèmes de sécurité iFrame que j'ai lus, mais rester sur le premier onglet et le traitement tbMain_frame0 fonctionne entièrement bien.

Quelqu'un peut-il me donner un indice sur ce qui se passe et comment gérer cette page?

Merci.

+0

I ce que IDE/plate-forme est-ce? –

+0

Je fais mon code dans Excel VBA. Je ne suis pas lié à ce site, donc je n'ai aucune idée. –

Répondre

1

Il ne peut pas être la meilleure idée, mais vous pouvez attendre l'erreur en aller:

Dim test 
On Error Resume Next 

Do While True 
    test = Frame.contentWindow.Document.getElementById("txtStart").Value 
    If Err.Number = 0 Then 
     Exit Do 
    ElseIf Err.Number > 0 And Err.Number <> 91 Then 
     Exit Sub 
    End If 

    Err.Clear 
Loop 
+0

C'est assez bon pour mon travail simple et cela a fonctionné, merci. La mauvaise idée consistait à essayer de coder quelque chose dans 4 heures du matin - j'aurais dû deviner cette solution évidente moi-même. Mais merci quand même. ;) –

Questions connexes