【问题标题】:Vba getElementById cause Run-time error '424'Vba getElementById 导致运行时错误“424”
【发布时间】:2017-02-13 19:51:52
【问题描述】:

如果有人可以提供帮助,我将不胜感激。 部分代码总是遇到运行时错误:

HTML部分在图片中:

感谢关注。

Sub HTML_Table_To_Excel()
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.application")
    With objIE
        .Visible = True
        .navigate ("http://www.global-rates.com/interest-rates/libor/libor.aspx")
    End With
    While objIE.Busy
    Wend
    
    Dim HTMLDoc As Object
    Set HTMLDoc = objIE.document
    
    Dim EuroButton As Object
    Set EuroButton = HTMLDoc.getElementById("btn_eur")
    
    objIE.Quit
    Set objIE = Nothing
......
End Sub

【问题讨论】:

  • 哪一行失败了?如果您在该行上打断并等待几秒钟再继续执行,它仍然会失败吗?
  • @TimWilliams Set EuroButton = ..... 此行失败。谢谢,蒂姆,如果我在那里放一个断点,然后等待一段时间,子不会失败。
  • 我认为您需要扩展您的 While IE.Busy 检查:请参阅 - stackoverflow.com/questions/19334880/…

标签: html vba button web-scraping


【解决方案1】:

这不是元素 ID - 它是标签名称; Set EuroButton = HTMLDoc.getElementsByTagName("btn_eur") 那么当您需要订购时:EuroButton(0).[command here]

【讨论】:

    【解决方案2】:

    你的选择器很好。它确实有那个id。问题是您在尝试点击之前需要适当地等待页面加载。试试下面的。我还更新了 .navigate2 并删除了不必要的 ()。

    Option Explicit
    Public Sub HtmlTableToExcel()
        Dim objIE As Object, HTMLDoc As Object, euroButton As Object
        Set objIE = CreateObject("InternetExplorer.application")
        With objIE
            .Visible = True
            .Navigate2 "http://www.global-rates.com/interest-rates/libor/libor.aspx"
    
            While .Busy Or .readyState < 4: DoEvents: Wend
    
            Set HTMLDoc = .document
            Set euroButton = HTMLDoc.getElementById("btn_eur")
            euroButton.Click
            While .Busy Or .readyState < 4: DoEvents: Wend
             Stop '<==delete me later
            '-----
            '.Quit
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2013-05-14
      相关资源
      最近更新 更多