2017-01-17 1 views
0

Sur this site Je peux sélectionner le pays et la langue dans le menu déroulant mais lorsque je clique sur le bouton "Remplir le nouveau formulaire de demande". Il dit que les champs sont vides.Sélection de la valeur dans une liste déroulante sur une page Web en utilisant vba

Toute aide serait appréciée.

Sub Test() 

strURL = "https://visa.kdmid.ru/PetitionChoice.aspx" 

    With ie 
    .Visible = True 
    .navigate strURL 

    While .Busy 
     DoEvents 
    Wend 

    Set html = .document 

    'Country where you will apply for visa. 
    Set ctY = html.getElementById("ctl00$phBody$Country") 
    For i = 1 To ctY.Options.Length 
     If ctY.Options(i).Text = "NETHERLANDS" Then 
      ctY.selectedIndex = i 
      Exit For 
     End If 
    Next i 

    'Select Language 
    Set lnG = html.getElementById("ctl00$phBody$ddlLanguage") 
    For i = 1 To lnG.Options.Length 
     If lnG.Options(i).Text = "ENGLISH" Then 
      lnG.selectedIndex = i 
      Exit For 
     End If 
    Next i 

    'Click I have read instructions check box 
    html.getElementById("ctl00$phBody$cbConfirm").Click 


    'Click apply button 
    Set btnGo = html.forms(0).all("ctl00$phBody$btnNewApplication") 
    btnGo.Click 

    End With 

    End Sub 

Répondre

1

Alors, vous êtes sur la bonne voie, mais si vous regardez le code HTML du site il y a en fait deux éléments avec le pays sélection- vous avez obtenu le premier, « ctl00_phBody_Country », mais cela est en fait la déroulant, et la valeur sélectionnée réelle est stockée dans 'ctl00_phBody_cddCountry_ClientState' ... la section de langue a une structure similaire. Enfin, la valeur acceptée est non seulement le nom du pays que vous voyez dans le menu déroulant, il est en fait une combinaison d'un code de pays dans la liste déroulante et le nom du pays ....

Voir ci-dessous pour exemple de code:

Public Sub Test() 
Dim IE As InternetExplorer 
Dim HTMLDoc As HTMLDocument 

Dim countryStr As String 
Dim countryObj As HTMLObjectElement 
Dim countryCodes As IHTMLElementCollection 
Dim codeCounter As Long 
Dim languageStr As String 
Dim languageObj As HTMLObjectElement 
Dim languageCodes As IHTMLElementCollection 

countryStr = "Netherlands" 
languageStr = "English" 

Set IE = New InternetExplorer 

With IE 
    .Visible = False 
    .Navigate "https://visa.kdmid.ru/PetitionChoice.aspx?AspxAutoDetectCookieSupport=1" 
    While .Busy Or .ReadyState <> READYSTATE_COMPLETE: Wend 
    Set HTMLDoc = IE.document 
End With 

Set countryObj = HTMLDoc.getElementById("ctl00_phBody_cddCountry_ClientState") 
Set countryCodes = HTMLDoc.getElementById("ctl00_phBody_Country").getElementsByTagName("option") 
For codeCounter = 0 To countryCodes.Length - 1 
    If countryCodes(codeCounter).innerText = UCase(countryStr) Then 
     countryObj.Value = countryCodes(codeCounter).Value & ":::" & countryCodes(codeCounter).innerText & ":::" 
     While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: Wend 
     Exit For 
    End If 
Next 

Set languageObj = HTMLDoc.getElementById("ctl00_phBody_cddLanguage_ClientState") 
Set languageCodes = HTMLDoc.getElementById("ctl00_phBody_ddlLanguage").getElementsByTagName("option") 
For codeCounter = 0 To languageCodes.Length - 1 
    If languageCodes(codeCounter).innerText = UCase(languageStr) Then 
     languageObj.Value = languageCodes(codeCounter).Value & ":::" & languageCodes(codeCounter).innerText & ":::" 
     While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: Wend 
     Exit For 
    End If 
Next 

HTMLDoc.getElementById("ctl00$phBody$cbConfirm").Click 
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE: Wend 
HTMLDoc.getElementById("ctl00_phBody_btnNewApplication").Click  'Launch Form 

IE.Quit 
Set IE = Nothing 
End Sub 
+0

Nous vous remercions de votre effort, mais lorsque j'exécute cela, j'ai la même erreur de champs vides. – newguy

+0

Hmm, je l'ai juste rouvert de mon côté pour vérifier et a bien fonctionné - les listes déroulantes semblent vides mais quand je passe à l'écran suivant je ne reçois aucune erreur ... Peut-être avez-vous des références manquantes? La seule chose à laquelle je pouvais penser - Assurez-vous que 'Microsoft HTML Object Library' et 'Microsoft Internet Controls' sont ajoutés. – TheSilkCode

+0

Je l'ai fait référence aux bibliothèques ça ne marche pas de mon côté pouvez-vous m'envoyer votre version du fichier peut-être? Parce que j'ai pris votre code de la réponse car il ne fonctionne toujours pas. – newguy