2017-08-28 100 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

相關問題