2016-11-07 162 views
1

我已經能夠使用vba的.value方法處理列表中的數據。但是,當試圖更新一個特定的值時,它填充的值爲空,不會讓我改變它。我試圖將日期推入此字段,但日期取自列表中的日曆旁邊的日曆,日曆將日期放入框中。當使用dom資源管理器時,我只需更改選項值並更改字段中的日期。當我使用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")創建它,然後在select元素上調用add方法。 HTH

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>