Excel VBA单击由javascript控制的表中的单元格

时间:2014-05-19 02:23:58

标签: javascript excel-vba click mouseevent onmouseup

我正在尝试为excel创建一个Web查询,但我遇到了一些障碍。我想出了如何登录网页并单击链接转到右侧portalID。但是我无法获得具体报告。

要获取特定报告,我需要在表格中单击其链接,但似乎使用javascript。此表的HTML如下所示。此表中大约有10个单元格,但为了保持代码清晰,我只包含前2个单元格。如您所见,每个单元格都有自己唯一的ID,因此我可以使用VBA轻松过滤到正确的单元格元素。但是,我似乎无法弄清楚如何实际点击该单元格。

<table submenu='1' border='0' cellpadding='6' cellspacing='0'
 id='ctl02n4c73594f1bf740b982340da2a792ff62_MainM' 
 class="ctl02n4c73594f1bf740b982340da2a792ff62Island"  
 style=' background:#141311; border-width:0px; width:100%; 
 cursor:Default;' onselectstart="javascript:igmenu_selectStart();" 
 onmouseover="javascript:igmenu_mouseover(this, event);" 
 onmouseout="javascript:igmenu_mouseout(this, event);" 
 onmousedown="javascript:igmenu_mousedown(this, event);" 
 onmouseup="javascript:igmenu_mouseup(this, event);"igLevel='0'>
  <tr>
    <td align='center' id='ctl02n4c73594f1bf740b982340da2a792ff62_1' 
     igTag='4eddf201-f6ed-4e11-b2ff-6a742128909c'  
     class="n_4c73594f_1bf7_40b9_8234_0da2a792ff62_Class"style=" 
     white-space: nowrap; ;" igHov='n_4c73594f_1bf7_40b9_8234_0da2a792ff62_Hover' 
     igTop='1'>Welcome</td>
    <td align='center' id='ctl02n4c73594f1bf740b982340da2a792ff62_2' 
     igTag='e0d4474e-87f8-42cc-ab47-38751029052d'  
     class="n_4c73594f_1bf7_40b9_8234_0da2a792ff62_Class"style=" 
     white-space: nowrap; ;" igHov='n_4c73594f_1bf7_40b9_8234_0da2a792ff62_Hover' 
     igTop='1'>Dashboard</td>
  </tr>
</table>

这是我的vba指向我需要点击的单元格。看起来我需要调用&#34; onmouseup&#34;表的事件。我将如何&#34;链接&#34;我需要的表格是onmouseup事件的表格吗?

Sub clickTable(toFind As String, ie As Object)
'"toFind" is the ID of the cell to find, ie is the IE application
Dim ieDoc As Object 'ieDocDocument
Dim tdCollection As Object 'table that has the javascript events and contains
                            the cells I want to click
Dim cell As Object 'specific "clickable" cell in the table to "click"

    Set ieDoc = ie.document
    Set tdCollection = ieDoc.getelementbyID("ctl02n4c73594f1bf740b982340da2a792ff62_MainM").getElementsByTagName("td")
    For Each cell In tdCollection
        If cell.ID = toFind Then
            cell.Click
            Exit Sub
        End If
    Next

End Sub

1 个答案:

答案 0 :(得分:2)

好吧,在搜索其他vba / javascript问题时,我实际上是自己想出来的!

我浏览了所有的javascript代码,看看HTML事件是如何与javascript绑定的,当然,“onmouseup”需要“onmousedown”,这需要“onmouseover”。在这里,我试图执行最终的交互,甚至没有想到打破javascript代码。

因此,如果其他人在尝试单击javascript控制表菜单中的单元格时遇到问题,则可能需要执行鼠标与页面交互的所有方式,具体取决于javascript的编写方式。

这是我的最终代码。

Sub clickTable(toFind As String, ie As Object)
'toFind is the ID of the element to find, ie is the IE application
Dim ieDoc As Object 'ieDocDocument
Dim tdCollection As Object 'table that has the javascript attributes and contains the element I want to click
Dim cell As Object 'specific "clickable" cell in the table to test

        Set ieDoc = ie.document
        Set tdCollection = ieDoc.getelementbyID("ctl02n4c73594f1bf740b982340da2a792ff62_MainM").getElementsByTagName("td")
        For Each cell In tdCollection
            If cell.ID = toFind Then
                cell.FireEvent ("onmouseover")
                cell.FireEvent ("onmousedown")
                cell.FireEvent ("onmouseup")
                Exit Sub
            End If
        Next

    End Sub