2017-02-10 6 views
1

Я работаю над открытием веб-страницы и заполнением некоторых полей. Мне удалось заполнить текстовые поля, но у меня возникли проблемы с выбором опций из выпадающих списков с проверкой/выбором переключателей.Выберите опцию из раскрывающегося списка Internet Explorer

Это HTML код со ссылкой на списке:

HTML code for drop down list

Это один код для одной из кнопок радио: HTML code for radio button

Это мой код до сих пор:

Sub w() 
' 
' w Macro 
' 
' Keyboard Shortcut: Ctrl+w 
' 
'pick ups cell b2 value 
Dim cellvalue As String 
cellvalue = ActiveSheet.Cells(1, 2) 

Dim HTMLDoc As HTMLDocument 
Dim oBrowser As InternetExplorer 
''Sub Login_2_Website() 

Dim oHTML_Element As IHTMLElement 
Dim sURL As String 

On Error GoTo Err_Clear 
sURL = cellvalue ' 
Set oBrowser = New InternetExplorer 
oBrowser.Silent = True 
oBrowser.timeout = 60 
oBrowser.navigate sURL 
oBrowser.Visible = True 

Do 
' Wait till the Browser is loaded 
Loop Until oBrowser.readyState = READYSTATE_COMPLETE 

Set HTMLDoc = oBrowser.document 

'fill email response address 
HTMLDoc.all.emailAddresses.Value = ActiveSheet.Cells(5, 3) 

'fill shipment reference number 
HTMLDoc.all.filingRefNumber.Value = ActiveSheet.Cells(5, 7) 

'fill dropbox option 
'NOT WORKING  
If Not VBA.IsNull(ie.document.getElementById("select2-drop-mask")) Then 
    Dim htmlSelect 
    Set htmlSelect = ie.document.getElementById("select2-drop-mask") 
    htmlSelect.Value = 4 - POSTDEPARTURE 
Else 
    MsgBox "Element 'select2-drop-mask' was not found", vbExclamation 
End If 

'SELECT RADIO BUTTON 
' NOT WORKING 
ie.document.getElementsByName("shipmentInfo.routedExpTransactionInd.stringFiEld").Item(1).Checked = True 

For Each oHTML_Element In HTMLDoc.getElementsByTagName("Login") 
If oHTML_Element.Type = "Login" Then oHTML_Element.Click: Exit For 
Next 

' oBrowser.Refresh ' Refresh If Needed 
Err_Clear: 
If Err <> 0 Then 
'Debug.Assert Err = 0 
Err.Clear 
Resume Next 
End If 
End Sub 

ответ

0

Что касается вашего списка/выпадающего списка, я думаю, что есть два возможных решения.

  1. Изменения в

    htmlSelect.Value = "4 - POSTDEPARTURE"

  2. Обратитесь к значению индекса. То есть если это первый элемент в раскрывающемся списке, это элемент (0).

    htmlSelect.item (0) .selected = "True"

Для вашего радио-кнопки, завернуть 'истина' в кавычках. Также вам нужно будет пропустить все элементы с этим конкретным именем (getElementbyID возвращает только 1 элемент, но getElementsByName может ссылаться на несколько элементов).

например.

dim objects 
dim obj 

set objects=document.getElementsByName("shipmentInfo.routedExpTransactionInd.stringFiEld") 

for each obj in objects 
obj.item(0).checked=True 
next 

или попробовать:

Set ieRadio = IE.Document.all 
    ieRadio.Item("shipmentInfo.routedExpTransactionInd.stringFiEld")(1).Checked = True 
+0

Спасибо RyanL, теперь он работает! У меня нет большого опыта работы с циклами, но мне удалось заставить его работать. –