VBA IE启用“列表”并选择“ onchange”“选项值”

时间:2018-06-28 08:29:37

标签: javascript vba internet-explorer

我目前正在从事涉及VBA和IE的自动化过程。一切顺利,我的代码正在执行多项操作。问题是,当我接近具有2个下拉列表的零件时,在第一个选择完成后出现第二个下拉列表。

我为本节开发的部分代码(相当粗糙)如下:

Dim dropY As Object
Set dropY = IE.Document.getelementbyid("selectedListType")
dropY.Focus
Application.SendKeys "{DOWN 4}"

Do While IE.Busy
Application.Wait DateAdd("s", 2, Now)
Loop
Do Until .ReadyState = 4
DoEvents
Loop
'second list
Dim dropZ As Object
Set dropZ = IE.Document.getelementbyid("dataSet")
dropZ.Focus 'I can see that the window is being selected
Application.SendKeys ("{DOWN 1}") 'at this point the code fails
Application.SendKeys ("{ENTER}")

问题是,如何在两个下拉列表中进行选择以避免将来发生错误?以下是网站资源。

'first list
Select List Type
<select name="selectedListType" id="selectedListType" class="regular" onchange="onSubmitOrgConfig(2)">
<option value="Choice1"
>
Country Lists
</option>
<option value="Choice2"
>
Region Lists
</option>
<option value="Choice3"
>
Area Lists
</option>
<option value="Choice4"
>
Aggregated Lists
</option>
<option value="OTHER"
selected>
Other Lists
</option>
<option value="Other1"
>
Secure List
</option>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;
Select List
<select name="dataSet" id="dataSet" class="regular" onchange="onSubmitDataSet(6, this.value);">
<option value="">--Select--</option>
<option value="LIST_1"
>
BLACKLIST_LIST
</option>
<option value="LIST_2"
>
BLUE_LIST
</option>
<option value="LIST_3"
selected>
RED_LIST
</option>
<option value="LIST_4"
>
YELL_LIST
</option>
<option value="LIST_5"
>
PURP_LIST
</option>
<option value="LIST_6"
>
BL_LIST
</option>
<option value="LIST_7"
>
ORA_LIST
</option>
<option value="LIST_8"
>
NOCOL_LIST
</option>
<option value="LIST_999"
>
LIST_999
</option>
</select>

1 个答案:

答案 0 :(得分:3)

tl; dr;

如果没有网页可玩,那么很难为事件的排序提供建议,如果下面的所有内容都能正常工作,但希望会有所帮助。

例如,我不知道您是否必须单击“单击第一个”列表,选择一个项目,然后会自动触发附加的javascript,或者是否需要实际触发该事件。然后,如果您必须重复第二次。因此,在下面,我向您展示了我将如何尝试分别实现每个动作,以便您可以与他们一起玩以查看有效的方法。我们可以根据反馈进行完善。


selectedListType下拉列表:

您可以尝试用

单击第一个列表
.document.querySelector("#selectedListType").Click

您可以使用以下方法从第一个列表中选择项目:

.document.querySelector("#selectedListType [value='Choice1']")

适当更改Choice1

因此标记为selected可能是

.document.querySelector("#selectedListType [value='Choice1']").Selected = True

数据集下拉列表:

您可以尝试使用

单击第二个列表
.document.querySelector("#dataSet").Click

您可以使用以下方法从第二个列表中选择项目:

.document.querySelector("#dataSet option[value='LIST_1']")

适当更改LIST_1

因此标记为selected可能是

.document.querySelector("#dataSet option[value='LIST_1']").Selected = True

onchange事件:

两个列表都有一个onchange事件:

您可以通过以下方式触发这些

 .document.querySelector("#selectedListType").FireEvent "onchange"
 .document.querySelector("#dataSet").FireEvent "onchange"