Object Variable or With Block Variable not set getelementsbyname vba

前端 未结 1 1237
花落未央
花落未央 2021-01-23 08:31

I am trying to pull the data from websites. So I want to select 3 drop-down values in below URL but i cant change those values. example i want to select month

         


        
相关标签:
1条回答
  • 2021-01-23 08:46

    You can use css id selector in descendant combination with attribute = value selector

    #fmonth1 option[value='1']
    

    That is:

    ie.document.querySelector("#fmonth1 option[value='1']")
    

    You may need .Click on the end for selected. Can't test that url but also try:

    ie.document.querySelector("#fmonth1 option[value='1']").Selected = True
    

    More generally, if you know an element exists, and your syntax is correct, but you are still getting not set then it may be a timing issue where you need a longer wait (e.g. timed loop) before attempting to access, e.g.

    Const MAX_WAIT_SEC As Long = 10
    Dim t As Date, ele As Object
    t = Timer
    Do
        DoEvents
        On Error Resume Next
        Set ele = ie.document.querySelector("#fmonth1")
        On Error GoTo 0
        If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While ele Is Nothing
    
    If Not ele Is Nothing Then
        ele.Click 'may be needed to expose options
        ie.document.querySelector("#fmonth1 option[value='1']").Selected = True
    End If
    

    If inside of a parent iframe/frame you will need to navigate that first e.g.

    ie.document.getElementsByTagName("iframe")(0).contentDocument.querySelector("#fmonth1 option[value='1']").Selected = True
    

    I tested the following now I can access the page:

    Public Sub MakeSelection()
        Dim ie As New InternetExplorer
    
        With ie
            .Visible = True
            .navigate "https://www.bseindia.com/markets/debt/BhavCopyDebt.aspx?expandable=6"
    
            While .Busy Or .readyState < 4: DoEvents: Wend
    
            .document.getElementsByTagName("iframe")(0).contentDocument.querySelector("#fmonth1 option[value='1']").Selected = True
    
             Stop  '<==Delete me later
    
            .Quit
        End With
    End Sub
    
    0 讨论(0)
提交回复
热议问题