在VBScript中捕获一个事件

时间:2010-03-19 17:19:51

标签: dom scripting vbscript

人。这是一个VBS脚本,可以打开Goog​​le,填写表单,然后点击搜索按钮。

set ie = CreateObject("InternetExplorer.Application")

ie.navigate("www.google.com")

ie.visible = true

while ie.readystate <> 4
    wscript.sleep 100
WEnd

set fields = ie.document.getelementsbyname("q")
set buttons = ie.document.getelementsbyname("btnG")

fields(0).value = "some query"
buttons(0).click

ie.quit

Sub OnClickSub()
    MsgBox  "button clicked!", 0
End Sub

显然,buttons(0).click会触发按钮的onclick事件,我在某种程度上需要在我的脚本中捕获它,并为其提供一些处理,例如启动OnClickSub()

有没有人知道应该怎么做?

2 个答案:

答案 0 :(得分:3)

使用GetRef函数获取指向事件处理程序的指针并将其绑定到onclick事件,如下所示:

buttons(0).onclick = GetRef("OnClickSub")

(显然,从网页外部调用时,attachEvent不起作用。)

答案 1 :(得分:0)

这是捕获Excel中发生的事件的非常简单的方法。 Excel必须打开才能正常工作。将其复制并粘贴到新的VBScript中,然后运行它。然后进入Excel,并更改单元格的值。将会弹出一个消息框,向您显示更改的单元格。

'/////////////////////////////////////////////////Event Constant Definitions/////////////////////////////////////////////////////
    EVENT_CELL_CHANGE = 1   '//////////////////////////////////////////////////////////////////////
    EVENT_SELECTED_CELL_CHANGE = 2 '/////////////////////////////////////////////////////
    EVENT_SELECTED_SHEET_CHANGE = 3 '///////////////////////////////////////////////////
    EVENT_SELECTED_WORKBOOK_CHANGE = 4 '///////////////////////////////////////
'/////////////////////////////////////////////////Event Constant Definitions/////////////////////////////////////////////////////
'_______________________________________________________________________
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////Global Program/////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
set O = getObject( , "Excel.Application")
Call WaitUntil_Event(EVENT_CELL_CHANGE, O.Selection, RtnVar, "BLANK")
msgbox RtnVar.address

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////End of Global Program//////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'_______________________________________________________________________
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////Start of Main Sub Program/////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////This program was written by///////////////////////////////////////////////////////
'///////////////////////////////////////////Ben Ahrens (April 5th, 2019///////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Sub WaitUntil_Event(EventType, CheckVal, ByRef ReturnVariable, RunVBScript_FileName)
    On Error Resume Next
    LoopedCycleTime = 50    
    WaitUntil_SelectionChange = False
    'msgbox EVENT_CELL_CHANGE 
    select case EventType
        Case EVENT_CELL_CHANGE
            Set CheckVal = O.Selection
            Do
                Set CheckVal = O.Selection
                Val= CheckVal.Value
                Do 
                    WScript.Sleep LoopedCycleTime
                Loop Until O.Selection.Address <> CheckVal.Address
            Loop While CheckVal.Value = Val
            Set RtnVar = CheckVal
        Case EVENT_SELECTED_CELL_CHANGE 
            Do 
                WScript.Sleep LoopedCycleTime
            Loop Until O.Selection.Address <> CheckVal.Address
        Case EVENT_SELECTED_SHEET_CHANGE 
            Do 
                WScript.Sleep LoopedCycleTime
            Loop Until O.Selection.Worksheet.Name <> CheckVal.Worksheet.Name

        Case EVENT_SELECTED_WORKBOOK_CHANGE 
            Do 
                WScript.Sleep LoopedCycleTime
            Loop Until O.Selection.Worksheet.Parent.Name <> CheckVal.Worksheet.Parent.Name
    End Select
    'WaitUntil_Event = True
    'Include RunVBScript_FileName

End Sub

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////End of Main Sub Program//////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////