2016-07-29 66 views
2

我對VBA和HTML相當陌生。我正在寫一個VBA宏,在填寫一個Web表單之前瀏覽一個網站。使用值而不是索引從HTML下拉菜單中選擇VBA代碼

在導航期間,腳本需要從下拉菜單中選擇一個選項。我目前使用下面的(毫無疑問可怕,但功能)代碼,找到正確的下拉菜單索引2

Set dropOptions = HTMLDoc.getElementsByTagName("select") 
 
For Each op In dropOptions 
 
If op.getAttribute("name") = "tilastojakso" Then 
 
op.Focus 
 
op.selectedIndex = 2 
 
Exit For 
 
End If 
 
Next op

選擇選項之前,這裏是HTML相關的下拉列表中:

<tr> 
 
    <td>Statistical period</td> 
 
    <td colspan="2"><select name="tilastojakso" > 
 
<option value="2016-07">2016-07 (deadline 12.08.2016)</option> 
 
<option value="2016-06">2016-06 (deadline 14.07.2016)</option> 
 
<option value="2016-05">2016-05 (deadline 14.06.2016)</option> 
 
<option value="2016-04">2016-04 (deadline 16.05.2016)</option> 
 
<option value="2016-03">2016-03 (deadline 14.04.2016)</option> 
 
<option value="2016-02">2016-02 (deadline 14.03.2016)</option> 
 
<option value="2016-01">2016-01 (deadline 12.02.2016)</option> 
 
<option value="2015-12">2015-12 (deadline 18.01.2016)</option> 
 
<option value="2015-11">2015-11 (deadline 14.12.2015)</option> 
 
<option value="2015-10">2015-10 (deadline 13.11.2015)</option> 
 
<option value="2015-09">2015-09 (deadline 14.10.2015)</option> 
 
<option value="2015-08">2015-08 (deadline 14.09.2015)</option> 
 
<option value="2015-07">2015-07 (deadline 14.08.2015)</option> 
 
<option value="2015-06">2015-06 (deadline 14.07.2015)</option> 
 
<option value="2015-05">2015-05 (deadline 12.06.2015)</option> 
 
<option value="2015-04">2015-04 (deadline 18.05.2015)</option> 
 
<option value="2015-03">2015-03 (deadline 16.04.2015)</option> 
 
</select></td>

ŧ他的問題:

我想根據選項值而不是索引從下拉列表中進行選擇。假設我有一個名爲「period」的變量,其中包含字符串「2016-04」。我希望腳本選擇一個與「period」中存儲的字符串相匹配的值。我花了幾個小時搜索這個網站和其他地方,但一直沒能找到我能理解的答案。

在此先感謝!

+0

變化'op.Focus op.selectedIndex = 2'到'op.Value = period' – Jordan

+1

感謝喬丹,這個工程和是最優雅的解決方案! – Aaron

+0

對速度和代碼的另一個思考是,你可能只需選擇元素的名稱即可,然後設置它的值。例如HTMLDoc.getElementsByName(「tilastojakso」)(0).value =句點。我會檢查以確保元素是一個對象,以防它在頁面上不存在。 –

回答

0

您可以使用下面的代碼由價值選擇的選項

Set dropOptions = HTMLDoc.getElementsByTagName("select") 

For Each o In dropOptions.Options 
    If o.Value = "2016-04" Then 
     o.Selected = True 
     Exit For 
    End If 
Next 
相關問題