2017-01-17 8 views
0

On 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 сайта есть на самом деле два элемента со страной выбора-вы получили первый, «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