未设置对象变量或带有块变量的getelementsbyname vba [英] Object Variable or With Block Variable not set getelementsbyname vba

查看:135
本文介绍了未设置对象变量或带有块变量的getelementsbyname vba的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从网站中提取数据。所以我想在下面的URL中选择3个下拉值,但是我无法更改这些值。例如,我要选择月份

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

<select name="fmonth1" id="fmonth1" class="dropdownboxlang" size="1" style="width:60px;">
    <option value="0">MM</option>
    <option value="1">Jan</option>
    <option value="2">Feb</option>
    <option value="3">Mar</option>
    <option value="4">Apr</option>
    <option value="5">May</option>
    <option value="6">Jun</option>
    <option value="7">Jul</option>
    <option value="8">Aug</option>
    <option value="9">Sep</option>
    <option value="10">Oct</option>
    <option value="11">Nov</option>
    <option value="12">Dec</option>

</select> 

我在更改下拉列表中的值时遇到的错误。我从两天开始尝试所有可能的方法。任何建议,将不胜感激。

the error i am getting while changing the value in drop-down. I am trying all the possible ways from two days. Any suggestion would be appreciated.

Public Sub bse()

    Dim IE As InternetExplorer
    Dim HTML As HTMLDocument
    Dim Dropdown As IHTMLElement
    Dim dropOption As IHTMLElement
Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .Navigate "https://www.bseindia.com/markets/debt/BhavCopyDebt.aspx?expandable=6"
    End With

    Do
        DoEvents
        Application.Wait Now() + TimeValue("00:00:01")
    Loop Until IE.ReadyState = 4 And Not IE.Busy

    Set HTML = IE.Document

HTML.getElementsByName("fmonth1")(0).Value = "1" error line 




    IE.Quit

End Sub


推荐答案

您可以在以下位置使用css id选择器具有属性=值选择器的后代组合

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

#fmonth1 option[value='1']

即:

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



结束




如果在父iframe /框架内,则需要先导航,例如


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

这篇关于未设置对象变量或带有块变量的getelementsbyname vba的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆