Excel VBA选择选项网站下拉列表

时间:2017-11-11 09:47:36

标签: excel vba excel-vba browser-automation

我正在尝试使用VBA excel自动化此网站。我陷入了一个需要从下拉框中选择值的位置。我对此非常陌生,因为这是我的第一个这样的项目。 这是我编码选择值的原因:

Set objSelect = objIE.document.getElementById("personTitle")

For Each opt In objSelect.Options
If opt.Value = "Miss" Then
    'Debug.Print "found!"

    opt.Selected = True
    'opt.Selected = "selected"
Else
    'Debug.Print "not found!"

    opt.Selected = False
End If
Next

我也尝试使用debug.print来检查我试图找到的值是否实际上是否匹配 - 事实证明它匹配。 我面临的唯一问题是价值没有设定。 这里的任何一位大师都可以帮忙吗?

以下是该部分的HTML:



<div class="input-wrap input-wrap__inline">

            <div tabindex="-1" class="select is-placeholder"><div class="select_display">Title</div><div class="select_arrow glyphicon glyphicon-chevron-down"></div><dl class="select_list"><dt class="pretend-dd is-hover" data-index="1" data-val="Mr">Mr</dt><dt class="pretend-dd" data-index="2" data-val="Mrs">Mrs</dt><dt class="pretend-dd" data-index="3" data-val="Miss">Miss</dt><dt class="pretend-dd" data-index="4" data-val="Ms">Ms</dt><dt class="pretend-dd" data-index="5" data-val="Dr">Dr</dt></dl></div><select name="personTitle" class="parsley-validated hasCustomSelect .no-change, .bv-dropdown-select is-invisible" id="personTitle" required="" data-required-message="Please select a title">
                <option selected="selected" value="">Title</option>
                <option value="Mr">Mr</option>
                <option value="Mrs">Mrs</option>
                <option value="Miss">Miss</option>
                <option value="Ms">Ms</option>
                <option value="Dr">Dr</option>
            </select>

     </div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

我想你想要一个不同的课程。该HTML代码段中的类为select_list。然后是后续的dt代码。

如果您观察到以下CSS选择器,其中"."表示类," dt"表示选择该类元素内的所有dt标记,您将看到它做出正确的选择:< / p>

CSS selector

在下面的代码中,我将此选择器翻译为:

ieDoc.getElementsByClassName("select_list")(0).getElementsByTagName("dt")

这假设索引0是用于类"select_list"的元素的正确索引。如果将集合设置为变量,则可以轻松检查集合以找到正确的索引,例如

Dim x As Object
Set x = ieDoc.getElementsByClassName("select_list")(0).getElementsByTagName("dt")

<强>代码:

Dim currentOption As Object
For Each currentOption In ieDoc.getElementsByClassName("select_list")(0).getElementsByTagName("dt")
    If InStr(currentOption.innerText, "Miss") > 0 Then
        currentOption.Selected = True
    End If
Next currentOption

答案 1 :(得分:0)

如果您还没有尝试,可以尝试以下几个选项:

If opt.Value = "Miss" Then
'Debug.Print "found!"
opt.Click

OR

If opt.Value = "Miss" Then
'Debug.Print "found!"
opt.Focus
opt.FireEvent ("onchange") 

如果这是在kendoGrid或kendoDropDownList中完成的事情,我也许可以帮助它。