如何通过VBA从MSHTML元素对象中获取ID并触发点击事件
问题背景
你已经定义tdobj as MSHTML.HTMLGenericElement并通过遍历拿到了目标td对象,直接调用tdObj.Click、tdObj.FireEvent ("onclick")无响应的核心原因是点击事件实际绑定在td内部的<a>标签上,而非td元素本身。
从td对象中获取子元素ID+触发点击的实现方案
你可以通过td对象的getElementsByTagName方法定位内部的a标签,即可读取元素ID,同时直接触发a标签的点击事件,完整修改后的代码如下:
Dim tds As MSHTML.IHTMLElementCollection Dim trs As MSHTML.IHTMLElementCollection Dim trObj As MSHTML.HTMLGenericElement Dim tdObj As MSHTML.HTMLGenericElement ' 新增变量存储td内的a标签对象 Dim linkObj As MSHTML.HTMLAnchorElement Set trs = ie.document.getElementsByTagName("tr") For Each trObj In trs Set tds = trObj.getElementsByTagName("td") NT = 0 ' 每次遍历新行时重置计数,避免计数累加错误 For Each tdObj In tds If InStr(1, tdObj.innerText, NameA, 1) > 0 Then NT = 1 End If If NT > 0 Then NT = NT + 1 If NT = 6 Then ' 定位td内的第一个a标签 Set linkObj = tdObj.getElementsByTagName("a")(0) ' 读取目标元素ID,可按需保存使用 Debug.Print "获取到的元素ID为:" & linkObj.ID ' 直接触发a标签的点击,比点击td更可靠 linkObj.Click ' 若点击依旧无响应,可以直接执行a标签href属性中的JS代码 ' ie.Navigate2 linkObj.href Exit For ' 找到目标后退出内层循环 End If Next If NT = 6 Then Exit For ' 找到目标后退出外层循环 Next
补充说明
- 若需要读取td内其他类型子元素的ID,只需要把
getElementsByTagName的参数替换为对应标签名即可 - 部分事件绑定特殊的场景,也可以调用IE直接执行JS触发点击:
ie.document.parentWindow.execScript "submitLink(document.Form0,'gofo');"
内容的提问来源于stack exchange,提问作者Stack
相关产品推荐
相关产品推荐

