VBA单击IE中的HoverMenu链接,无ID标记

时间:2017-03-05 10:55:35

标签: javascript html excel vba click

我无法让VBA成功点击下拉悬停菜单中的一个链接(没有ID标签)。具体来说,我正在使用VBA登录站点并导航到从数据库返回信息的特定页面。

以下是带有链接的HTML菜单:

</head>

<body>
  <script type="text/javascript" src="/APBKIS/js/struts-menu/coolmenu4-config.js"></script>
  <div>
    <ul id="primary-nav" class="menuList">
      <li class="menubar">
        <a href="javascript:void(0)" title="Service" target="_self">Service</a>
        <ul>
          <li class="menubar">
            <a href="javascript:void(0)" title="Reports" target="_self">Reports</a>
            <ul>
              <li>
                <a href="declRetrieval?asType=AIR" title="Formal Entries" target="_self">FormalEntries</a>
              </li>
              <li class="last">
                <a href="declRetrieval?asType=BRIEF" title="InformalEntries" target="_self">InformalEntries</a>
              </li>
            </ul>
        </ul>
        </li>
        <li class="menubar">
          <a href="javascript:void(0)" title="UserData">UserData</a>
          <ul>
            <li>
              <a href="CustProf!Approve" title="ChangeUserData">Change User Data</a>
            </li>
            <li class="last">
              <a href="CustProf!ChgPwd" title="ChangePassword">Change Password</a>
            </li>
          </ul>
        </li>
    </ul>
  </div>
</body>

</html>

我正在尝试点击下拉菜单中的InformalEntries项目。

这是我目前的VBA代码的一部分:

Sub ReportCall()

Dim IE As InternetExplorer
Dim html As HTMLDocument
Dim link As Object
Dim ElementCol As Object

Application.ScreenUpdating = False

Set IE = New InternetExplorer
IE.Visible = True

IE.navigate "https://somesite.com"

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

Set html = IE.document
html.getElementById("usrId").Value = "usernameabc"
html.getElementById("usrPwd").Value = "passwordabc"

'Click the "submit" button
html.getElementById("Image15").Click

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

'html.getElementById("myThis").Click
Set ElementCol = html.getElementsByTagName("a")
For Each link In ElementCol
    If link.innerHTML = "InformalEntries" Then
        link.Click
    End If
Next link

我试图通过下拉菜单(InformalEntries),没有任何反应,excel中也没有返回任何错误。

N.B。手动单击时链接不会导航到新网页。我认为它调用的是一个javascript函数,然后使用php将数据/信息返回到当前页面。通过html代码查看我认为这是在点击时调用的函数:

function viewPerm(actionUrl) {
  jQuery.ajax({
    type: "POST",
    url: actionUrl,
    data: null,
    dataType: "html",
    success: function(divDetail) {
      ScreenConvert();
      ShowDialog(divDetail, 700, 500);
    },
    error: function(req, status, error) {}
  });
}
/*]]>*/
<
/script>

我很感激任何建议和帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

执行此操作时:

 Set html = IE.document

它只有在您触发导航到另一个页面之后才有效:一旦页面重新加载,您对前一个文档的引用就不好了,您需要通过再次运行该行来重置它。