2017-08-28 28 views
-1

我试图使用Excel上的VBA将一些数据输入,记录和提取到网站中的过程自动化。到目前为止,我已经成功地登录并浏览到一个网页,我需要点击一个按钮,“搜索”,但它只是上有一个链接的图像:VBA在Internet Explorer上单击带有链接的图像

<a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="#" 
onclick="PrimeFaces.ab({s:'formE:j_idt56',u:'formE:vlrDetalhe 
formE:vlrPedidosTot formE:filiais formE:planejamento',f:'formE'});return 
false;" style="width: 80px; left: 240px;"> 

<img src="/Sip/resources/img/nissan/bt-searc1.png"> 

<span style="display:none;">Pesquisar</span> 

</a> 

我在网上搜索一个很多解决方案,但迄今为止没有任何工作。这个“a tabindex = -1”是div与另外4个“a tabindex = -1”的一部分,具有相同的“class”和“href”值,只有“onclick”事件发生了变化,但我似乎无法找到一种方法来寻找我在这里提到的事件并触发它。对我来说搜索没有独特的价值。也许我可以在标签内查找图像?我刚开始学习,从来就发现这个代码:

objIE.document.images(n).Title("bt-searc1.png").Click 

它给了我一个错误:“对象不支持此操作”

我明白任何帮助!

+0

我需要excel来列出用户名,密码和经销商代码,所以我可以填充一些文本框,我也需要它,因为所有这些的目的是在excel中导出电子表格中的大量数据。此外,在我工作的地方,我不允许安装编程工具,我的老板想要做到这一点。我知道它可以在Excel中完成,如果你知道一种方式,请只说它。 – SamRosignoli

+0

我很乐意提供帮助,但如果必须这样做,我会制作外部脚本以将相关数据提取到csv文件中,然后将该文件导入到excel中。唉,如果你的老板坚持认为一切都应该适合excel我想这不是一个解决方案。 – spectras

+0

尝试'objIE.document.parentWindow.execScript“PrimeFaces。ab({s:'formE:j_idt56',u:'formE:vlrDetalhe formE:vlrPedidosTot formE:filiais formE:planejamento',f:'formE'}); return false;“' – omegastripes

回答

0

所以,这里就是我想出了:

Dim elements As Object, element As Object, count As Long 

count = 0 
Set elements = objIE.document.getElementsByTagName("a") 

For Each element In elements 
    If element.className = "ui-menuitem-link ui-corner-all" Then 
     count = count + 1 
     If count = 4 Then 
     element.Click 
     End If 
    End If 
Next 

刚刚添加了一个好像里面科斯塔斯·K.的如果(并且非常感谢!)现在通过“ui-menuitem-link ui-corner-all”类触发正确的项目。

0

试试这个:

Dim elements As Object, element As Object 
Set elements = objIE.document.getElementsByTagName("a") 

For Each element In elements 
    If element.ClassName = "ui-menuitem-link ui-corner-all" Then 
     element.Click 
    End If 
Next 
+0

你的代码几乎做到了!问题是:“ui-menuitem-link ui-corner-all”是类名,就像我说的,我有4个其他元素具有相同的类名,所以if变成了另一个元素的真实性。我会尝试做另一个,如果要计算尝试的次数,直到达到5,这可能是正确的因素 – SamRosignoli

0

您也可以“欺骗”,并模拟鼠标点击,而不是试图通过HTML代码来做到这一点。尽管如此,为了让这个解决方案能够正常工作,在代码运行时不应该触摸鼠标。

如何应用它:

  1. 插入你的模块顶部这些函数声明:

    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long 
    Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) 
    Public Const MOUSEEVENTF_LEFTDOWN = &H2 
    Public Const MOUSEEVENTF_LEFTUP = &H4 
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
    
    Private Sub LeftClick() 
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 
        Sleep 50 
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 
    End Sub 
    
  2. 获取按钮的像素位置:为了做到这一点,尝试不同值与SetCursor函数,直到找到按钮的位置。 记住,第一变量代表在轴线X上的像素位置和从轴线Y的第二个与位置0上左上角从屏幕是

  3. 为了模拟左击,补充一点:

    SetCursor 200 , 400 ' Change those numbers by the one syou have found at step 2 
    Call LeftClick 
    
+0

这可能对我想到的其他任务有用!但是,如果有人误触鼠标,我不能冒险搞乱整个过程。 – SamRosignoli

相关问题