2017-01-17 20 views
0

オンthis site私はドロップダウンメニューから国と言語を選択できますが、「新しい申請フォームの記入」ボタンをクリックします。フィールドは空だと言っています。vbaを使用してウェブページのドロップダウンリストから値を選択

ご協力いただければ幸いです。

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 

答えて

1

だから、あなたは正しい軌道に乗っているが、あなたはサイトのHTMLを見ればあなたが最初の1つを得たセレクション国との二つの要素が「ctl00_phBody_Country」は、実際に存在しているが、これは実際にはありますドロップダウンし、実際に選択された値は 'ctl00_phBody_cddCountry_ClientState'に保存されます...言語セクションは同様の構造を持ちます。最後に受け入れられた値は、ドロップダウンに表示される国名だけではなく、実際にドロップダウンの国コードと国名の組み合わせです。

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

ありがとうございます。私はこれを実行すると、空のフィールドと同じエラーが発生します。 – newguy

+0

うーん、もう一度やり直してもう一度やり直してみてください。ドロップダウンは空白に見えますが、次の画面に進むとエラーは発生しません。 おそらくあなたの参照が欠落していますか?私が考えることができるのは、「Microsoft HTML Object Library」と「Microsoft Internet Controls」の両方が追加されていることを確認してください。 – TheSilkCode

+0

私はあなたのファイルのバージョンを私に送ってもらえますか?私は答えからあなたのコードを取ったので、それはまだ動作しません。 – newguy

関連する問題