我在MSScriptControl上讀過的所有文檔都說它可以響應添加到它的對象的事件。如何在Microsoft腳本控制中實現事件?
腳本控制允許您編寫腳本,該腳本會在發生對象上的事件時自動觸發 。 https://msdn.microsoft.com/en-us/library/ms974586.aspx
ScriptControl將能夠吸收由使用AddObject方法添加的對象 生成的事件。 http://flylib.com/books/en/1.492.1.154/1/
但我沒有成功這樣做。我認爲這意味着當添加的對象引發它的事件時,ScriptControl內部的代碼將會觸發。我無法得到任何工作。
尋求示例代碼將任何對象添加到ScriptControl,並處理該控件觸發的事件。不關心對象是自定義類,表單,控件還是內置Excel對象(如Worksheet)。
在Win Server 2008 64bit上運行Office 2010 32位。
開放的替代方法,如WSH,但梅塔的Tushar沒有與此http://dailydoseofexcel.com/archives/2009/08/19/using-vbscript-to-monitor-office-eventsor-not/
成功,我已經成功地將Excel應用程序對象到ScriptControl的,和Excel應用程序對象上執行的代碼:
這工作沒有任何問題:
Function TestProc()
Dim oScriptCtl As New MSScriptControl.ScriptControl
With oScriptCtl
' init
.Language = "VBScript"
.AllowUI = True
' add Excel application object
.AddObject "app", Application, True
' add procedure
Dim sCode As String
sCode = "Sub TestProc : MsgBox ""hi"" : End Sub"
.AddCode sCode
' run procedure. Msgbox displays.
.Run "TestProc"
End With
' cleanup
Set oScriptCtl = Nothing
End Function
失敗:
在此測試中,m_oScriptCtl是一個模塊範圍的變量。沒有任何反應,當我點擊形式:
Function TestForm()
Set m_oScriptCtl = New MSScriptControl.ScriptControl
With m_oScriptCtl
' init
.Language = "VBScript"
.AllowUI = True
MyForm.Show False
.AddObject "app", Application, True
.AddObject "frm", MyForm, True
.State = Connected
Dim sCode As String
sCode = "Sub frm_Click(): MsgBox Chr(14): End Sub"
.AddCode sCode
End With
End Function
這下一個報告上.AddCode以下錯誤:
預計 ')'
Function TestSheet()
Set m_oScriptCtl = New MSScriptControl.ScriptControl
With m_oScriptCtl
' init
.Language = "VBScript"
.AllowUI = True
.AddObject "app", Application, True
.AddObject "sheet", Sheet2, True
.State = Connected
Dim sCode As String
sCode = "Private Sub sheet_Change(ByVal Target As Range): MsgBox Target: End Sub"
.AddCode sCode
End With
End Function
在接下來的測試中, MyClass被定義爲:
Public Event MyEvent()
Public Sub TestEvent()
RaiseEvent MyEvent
End Sub
但.Run上報告「對象不支持屬性或方法」。所以在這種情況下,這不是失敗的事件 - 我不能在類中運行一個方法。
Function TestClassEvent()
Set oScriptCtl = New MSScriptControl.ScriptControl
Dim oClass As New MyClass
With oScriptCtl
' init
.Language = "VBScript"
.AllowUI = True
' add objects
.AddObject "app", Application, True
.AddObject "oClass", oClass, True
.State = Connected
' add code
Dim sCode As String
sCode = "Sub oClass_MyEvent() : MsgBox vbNullString : End Sub"
.AddCode sCode
.Run "oClass.TestEvent"
End With
' cleanup
Set oScriptCtl = Nothing
End Function
線索:
有人發帖:
如果你完全不下沉您的活動,嘗試調用 「ScriptControl1.Modules( 「環球」)CodeObject。Name_Of_Your_Event(參數列表)」 http://computer-programming-forum.com/59-vbscript/4b059f9f6eacfaf0.htm
- 但解決辦法是我不清楚:不應該事件過程被‘叫’明確,他們應該只是火災。下面兩行給「方法或數據成員找不到」,在上面TestClassEvent
例如:
m_oScriptCtl.Modules("Global").CodeObject.MyEvent
m_oScriptCtl.Modules("Global").CodeObject.TestEvent
我沒有測試以下,因爲我不太清楚如何:
腳本控制無法處理來自一類的事件在同一 項目爲應用程序它是被託管在 https://diigo.com/08we68
不知道下面是相關的,d on't很理解它: http://www.programmersheaven.com/discussion/79452/me-activecontrol-and-events
也許,添加對象只需添加該對象而不需要該對象的任何代碼。就像您將oClass添加爲對象一樣,但未添加其代碼。這是因爲我們有Set objModule = .Modules.Add(「NewModule」),後來我們使用objModule.AddCode向它添加代碼。所以建議添加一個類,然後添加代碼爲「Private WithEvents frm As New UserForm」,「Private Sub frm_Click()」&_ vbNewLine&vbTab&「MsgBox」「Hello,world from added module。」「 「&_ vbNewLine&」End Sub「 –
hi @MukulVarshney,thx for suggestion。但是,在將對象添加到ScriptControl後,我不知道如何向對象添加代碼。你說要添加一個模塊,但我如何將添加的模塊與添加的對象關聯?你能顯示代碼嗎? -thx –