Excel VBA 激活 web 中的 selectitem 并访问 web 获取数据

Excel VBA to activate selectitem in web and go web for data

我对 excel VBA 很陌生。我尝试使用 Internet 中所有可能的解决方案来激活 web 中的 selectitem 并获取数据 table 但它没有用。我的 Excel VBA 代码和 Javascript 如下。

Sub GetQuarterFinancials()

Dim ie As Object, URL As String

    URL = "https://www.marketwatch.com/investing/stock/aapl/financials"
    Set ie = CreateObject("internetexplorer.application")

With ie
 .Visible = True
 .navigate URL

 Do While .Busy
   DoEvents
 Loop
 Do While .readyState <> 4
   DoEvents
 Loop

  Set ticker = ie.document.getElementById("autocomplete_input")
  ticker.value = "FB"

  .document.getElementById("investing_ac_button").Click
  Application.Wait (Now + TimeValue("00:00:05"))

  Set selectitem = ie.document.getElementsByTagName("select")
  For Each i In selectitem
           i.value = "/investing/stock/msci/financials/income/quarter"
           i.FireEvent ("onchange")
      Next i
 End With
End Sub





    <select style="float:right" onchange="window.location = this.options[selectedIndex].value;">
        <option value="/investing/stock/msci/financials" selected="selected">Annual Financials</option>
        <option value="/investing/stock/msci/financials/income/quarter" >Quarter Financials</option>
    </select>
    <div style="clear:both"></div>
</div>
    <div class="block">
        <h2>Annual Financials for MSCI Inc.</h2>

您可以使用 css attribute = value selector 从下拉菜单中定位适当的选项,然后 select 它。

Option Explicit

'VBE > Tools > References:
' Microsoft Internet Controls

Public Sub MakeSelections()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .Navigate2 "https://www.marketwatch.com/investing/stock/aapl/financials"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("#autocomplete_input").Value = "FB" 'you could avoid search by adding ticker into url
            .querySelector("#investing_ac_button").Click
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim ele As Object
        With .document
            Do
            On Error GoTo 0
            Set ele = .querySelector("[value^='/investing/stock/fb/financials/income/quarter']")
            On Error Resume Next
            Loop While ele Is Nothing
            .querySelector("[value^='/investing/stock/fb/financials/income/quarter']").Selected = True
            .querySelector(".financials select").FireEvent "onchange"
                Stop 'delete me later
        End With
        .Quit
    End With
End Sub