使用 Excel VBA 到 select onchange JavaScript web 中的值

Using Excel VBA to select onchange value in JavaScript web

我是 VBA 的新手,我已经尝试过多次使用 Excel VBA 到 select 网站上的值,但它没有工作。下面是我使用的代码。

实际上我不知道如何获取元素,因为它没有 "id" 或 "name" 标签。

Sub GetFinanceData()

Dim URL As String

URL = "http://stock.finance.sina.com.cn/hkstock/finance/00001.html"

Set myIE = CreateObject("InternetExplorer.Application")

With myIE
.navigate URL
.Visible = True

Do While .Busy = True Or .readyState <> 4
Loop
DoEvents

.Document.parentWindow.execScript "selectData(zero);", "JavaScript"

End With

End Sub

下面是HTML代码,我想在打开网站时将选项值更改为"zero",谁能帮忙检查并告知我可以使用什么VBA代码获取值 "zero"?提前致谢!

 <a name="a1" id="a1"></a>
   <div class="part02">
      <div class="sub01">
          <div class="sub01_tt fblue">
              <span class=" selected"><a href="#a1" target="_self">重要财务指标</a></span>
              <span class=""><a href="#a2" target="_self">资产负债表</a></span>
              <span class=""><a href="#a3" target="_self">现金流量表</a></span>
              <span class=""><a href="#a4" target="_self">综合损益表</a></span>
              <em class="rt">报表类型:<select class="fgrey" style="width:100px;" interface="getFinanceStandardForjs?symbol=$symbol&financeStanderd=" table="tableGetFinanceStandard" onchange="selectData(this);">
                <option value="all" >全部</option>
                <option value="zero" >年报</option>
                <option value="1" >中报</option>
                <option value="2" >一季报</option>
                <option value="3" >三季报</option>
            </select></em>
        </div>
        <div class="sub01_cc">
             <div class="sub01_c">
                              <table cellspacing="0" cellpadding="0" border="0"  class="tab05">
                    <tbody id="tableGetFinanceStandard">
                     <tr>

确实,通过 HTML nameid 来寻址表单元素有时是有利的,但在您的示例中,您可以使用 getElementsByTagName() 方法来处理 select 标签,即使它们没有名称或 ID。

下面的代码会将所有 select 下拉列表设置为 "zero"。我简单测试了一下,效果很好。

Sub GetFinanceData()
    Dim URL As String
    URL = "http://stock.finance.sina.com.cn/hkstock/finance/00001.html"

    Set myIE = CreateObject("InternetExplorer.Application")
    With myIE
        .navigate URL
        .Visible = True

        Do While .Busy = True Or .readyState <> 4
            Loop
        DoEvents

        Set selectItems = myIE.document.getElementsByTagName("select")
        For Each i In selectItems
            i.Value = "zero"
            i.FireEvent ("onchange")
        Next i
    End With
End Sub

CSS select或:

使用 CSS select 或定位 option[value='zero']

也就是说 option 标签具有属性 value,值为 'zero'"[]"表示属性。


CSS查询:


VBA:

您应用select或使用documentquerySelector方法,即

简单地select然后

ie.document.querySelector("option[value='zero']").Selected = True

如果需要触发额外的事件触发:

ie.document.querySelector("option[value='zero']").FireEvent "onchange"