2012-10-13 84 views
0

在VBA中可以攔截一個javascript onchange事件並在web瀏覽器控件中獲取源ID#可能攔截change事件嗎?

<select name="status0" id="status0" onchange="javascriptonchangeeventhere"> 

上面的代碼是一個組合框演示,如果我要從組合框中選擇一個項目,它會在javascript中處理onchange。它所做的是拉起一個包含當前日期和參考號的表單,而不是我想拉起我自己的用戶表單,然後將這些數據吐到相關的(notes0)字段中。如何在發生這種情況時攔截它,以便將其分配給正確的字段。

+0

有沒有實際的方法來做到這一點?甚至確定一個onchange事件發生在哪裏? –

回答

2

下面是一個簡短的例子。項目引用的 「Microsoft HTML對象庫」 和 「Microsoft Internet控制」

類模塊中設置 「clsEvents」:

Option Explicit 

Public WithEvents slct As MSHTML.HTMLSelectElement 
Public WithEvents href As MSHTML.HTMLAnchorElement 

'Note that having defined "href" as "WithEvents", if you choose "href" 
' from the left-hand dropdown at the top of the class code module 
' then the right-hand dropdown will populate with events you can select 
' from to create an event-handling procedure in the class 

Private Function href_onclick() As Boolean 
    Debug.Print "link clicked" 
    href_onclick = False 'cancels the navigation 
End Function 

Private Sub slct_onchange() 
    Debug.Print "select onchange - value is " & slct.Value 
End Sub 

Private Function slct_onclick() As Boolean 
    Debug.Print "select onclick - value is " & slct.Value 
End Function 

在常規模塊:

Option Explicit 

Dim evt As clsEvents 

Sub Setup() 

    Dim IE As New InternetExplorer 
    Dim el As Object, el2 As Object 

    Set evt = New clsEvents 

    IE.Visible = True 
    IE.navigate "http://www.csee.wvu.edu/~riggs/html/select_example.html" 

    Do While IE.Busy 
    Loop 

    Set el = IE.document.getElementsByTagName("select")(1) 
    Set el2 = IE.document.getElementsByTagName("a")(1) 

    If Not el Is Nothing Then 
     Debug.Print "setting event capture: currentvalue=" & el.Value 
     Set evt.slct = el 
    End If 

    If Not el2 Is Nothing Then 
     Debug.Print "setting event capture on link:" & el2.innerText 
     Set evt.href = el2 
    End If 

End Sub 

如果運行Setup子然後更改第二個選擇的值或單擊IE中的頁面上的「Javascript」鏈接,您應該在VB編輯器的立即窗口中看到輸出。

希望能幫助你開始。

+0

非常感謝你! –

+0

+1很好做! –