在VBA中是否可以拦截javascript onchange事件并在webbrowser控件中获取原始ID#?
<select name="status0" id="status0" onchange="javascriptonchangeeventhere">
上面的代码是一个组合框演示,如果我要从组合框中选择一个项目,它将在javascript中处理onchange。它的作用是拉出一个包含当前日期和参考号的表单,而不是我想拉出自己的用户表单,然后将该数据吐出到相关的(notes0)字段中。如何在发生时拦截它,以便将其分配到正确的字段。
答案 0 :(得分: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
sub然后更改第二个选择的值或单击IE页面上的“Javascript”链接,您应该在VB编辑器的立即窗口中看到输出。
希望有助于您入门。