2016-11-07 9 views
1

Мне удалось манипулировать данными в списке, используя метод .value vba. Но при попытке обновить конкретное значение оно заполняет значение как пустое и не позволит мне его изменить. Я пытаюсь нажать дату в этом поле, но дата берется из календаря рядом со списком, который помещает дату в поле из календаря. При использовании dom explorer я просто изменяю значение параметра и меняет дату в поле. Когда я использую метод value для изменения этой же опции, он заполняет поле пустым. Есть идеи?Вставка значения из vba в список html

HTML code of page

Picture of list with calendar

Я был в состоянии изменить значение с помощью этого:

IE.Document.getElementsByTagName("select")(27).Value = _ 
    "[email protected]:gs.daysAgoStart(0)@javascript:gs.daysAgoEnd(0)" 

Для любого значения, которое уже существует, но не может изменить его к даже если он принимает дату. Например:

IE.Document.getElementsByTagName("select")(27).Value = "2016-11-04" 

Оставляет список пустым, как будто ничего не выбрано. Если я не введу дату, которая уже является частью списка, который извлекается из календаря, я не могу изменить дату.

+1

Используйте элементы управления MS HTML и установить объект типа IHTMLSelectElement быть выберите 27, что у вас есть. Intellisense и местные жители должны помочь вам, я думаю, что SelectedIndex необходимо установить. Это может быть JQuery или пользовательский элемент управления календарем, в котором есть что-то еще в глубине души, которое можно манипулировать ... –

ответ

0

Чтобы выбрать опцию, используйте selectedIndex. Чтобы добавить новый элемент option в элемент select, сначала создайте его с помощью doc.createElement("option"), а затем вызовите метод add на select. НТН

Option Explicit 

' Add reference to Microsoft Internet Controls (SHDocVw) 
' Add reference to Microsoft HTML Object Library 

Sub NewOptionDemo() 

    Dim ie As SHDocVw.InternetExplorer 
    Dim doc As MSHTML.HTMLDocument 
    Dim url As String 

    url = "file:///c:/Temp/main.html" 
    Set ie = New SHDocVw.InternetExplorer 
    ie.Visible = True 
    ie.navigate url 

    While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE 
     DoEvents 
    Wend 

    Dim htmlCombobox As MSHTML.HTMLSelectElement 
    Set doc = ie.document 
    Set htmlCombobox = doc.querySelector("select[id='select1']") 

    If (htmlCombobox Is Nothing) Then 
     MsgBox "No combobox with id 'select1' was found on the page." 
    Else 
     ' select first option 
     htmlCombobox.selectedIndex = 0 

     ' create new option, add this option to combobox and select it 
     Dim newOption As HTMLOptionElement 
     Set newOption = doc.createElement("option") 
     newOption.Value = "new-option" 
     newOption.Text = "New option" 
     htmlCombobox.Add newOption 
     htmlCombobox.selectedIndex = 3 

     ' chnge value and text of first option and select it again 
     htmlCombobox.Item(0).Value = "new-value-for-first-item" 
     htmlCombobox.Item(0).Text = "new value for first item" 
     htmlCombobox.selectedIndex = 0 
    End If 

    ie.Quit 
    Set ie = Nothing 
End Sub 

main.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<!-- saved from url=(0014)about:internet --> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
</head> 
<body> 
    <select id="select1"> 
     <option value="option1">Option 1</option> 
     <option value="option2">2016-11-04</option> 
     <option value="option3" selected="selected">Option 3</option> 
    </select> 
</body> 
</html>