【问题标题】:VBA to click object in Internet ExplorerVBA 在 Internet Explorer 中单击对象
【发布时间】:2025-12-16 01:30:01
【问题描述】:

我想使用 VBA 在 Internet Explorer 中单击一个对象以自动浏览网页。

For Each oHTML_Element In HTMLDoc.getElementsByTagName("a")
    If oHTML_Element.Title = "CSV" Then
        oHTML_Element.Click: Exit For
    End If
Next oHTML_Element

这是我尝试使用的代码,之前在我的 Excel 宏中成功使用过,但它不适用于这个对象,我不知道为什么。

这是我试图点击的对象的 HTML 代码:

<a id="apexir_dl_CSV" href=",DanaInfo=web1.us.industry.somecompany.net,SSL+f?p=103:5:1156695844453492:CSV::::">
 <img title="CSV" alt="CSV" src="/i41/ws/,DanaInfo=web1.us.industry.somecompany.net,SSL+download_csv_64x64.gif">​

【问题讨论】:

  • 您的 a 标签似乎没有标题属性。图片标签可以,但您不是在代码中寻找图片标签。

标签: vba


【解决方案1】:

对于您所展示的内容,您是否尝试过

Application.Wait Now + TimeSerial(0,0,2) '<== you can adjust the 2 which is number of seconds to wait
HTMLDoc.getElementById("apexir_dl_CSV").Click

或者

While IE.Busy = True Or IE.readyState < 4: DoEvents: Wend
Dim b As Object
Do: DoEvents: On Error Resume Next: Set b = IE.document.getElementById("apexir_dl_CSV"): On Error GoTo 0: Loop While b Is Nothing    '<== Loops until object found (should include a timeout to prevent infinite looping)
IE.document.getElementById("apexir_dl_CSV").Click

【讨论】:

  • 我没试过这个。现在尝试此代码,我得到运行时错误“91”:对象变量或未设置块变量。但是,当我点击调试然后继续运行宏时,它就可以工作了。
  • 这行得通,所以我猜网页还没有完全加载。非常感谢
【解决方案2】:

您的锚标记没有标题属性,因此您无法找到该锚来单击它。而是通过 id 属性查找锚标记。

这对我有用。

 For Each oHTML_Element In HTMLDoc.getElementsByTagName("a")
    If oHTML_Element.ID = "apexir_dl_CSV" Then
        oHTML_Element.Click: Exit For
    End If
Next oHTML_Element

希望对您有所帮助。

【讨论】: