MSScriptControlで読んだことがあるすべてのドキュメントは、追加されたオブジェクトのイベントに応答できると言っています。Microsoft Script Controlでイベントを実装する方法
スクリプトコントロールを使用すると、オブジェクトのイベントが発生したときに自動的に というスクリプトを作成することができます。 https://msdn.microsoft.com/en-us/library/ms974586.aspx
のScriptControlは、AddObjectメソッドを使用して追加 オブジェクトによって生成されたイベントをシンクすることができるであろう。 http://flylib.com/books/en/1.492.1.154/1/
しかし、私は成功していません。これは、追加されたオブジェクトがイベントを発生させるとScriptControl内のコードが起動することを意味します。私は働くことができません。
任意のオブジェクトをScriptControlに追加し、そのコントロールによって発生したイベントを処理するサンプルコードを検索してください。オブジェクトがカスタムクラス、フォーム、コントロール、またはWorksheetなどの組み込みExcelオブジェクトであるかどうかは気にしないでください。
Windows Server 2008 64bit上でOffice 2010 32bitを実行しています。このようWSHなどの代替方法とは
オープン、しかしTushar Mehta氏は、ここでそのhttp://dailydoseofexcel.com/archives/2009/08/19/using-vbscript-to-monitor-office-eventsor-not/
の成功を持っていなかった私は正常のScriptControlにExcelのApplicationオブジェクトを追加し、ExcelのApplicationオブジェクト上でコードを実行してきました:
これは何の問題も働きません:
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(のParameterList)」 http://computer-programming-forum.com/59-vbscript/4b059f9f6eacfaf0.htm
- それの回避策は、私には不明である:イベントプロシージャは、明示的に、彼らはちょうど火ことになっている 『と呼ばれる』ことになっていません。次の行の両方与える上記TestClassEvent
の例では、「メソッドまたはデータメンバが見つかりません。」:私は次のことをテストしていませんでした
m_oScriptCtl.Modules("Global").CodeObject.MyEvent
m_oScriptCtl.Modules("Global").CodeObject.TestEvent
、私はかなりよく分からないので、どのように:
以下は、dは関連性がある場合、スクリプト制御は、それがhttps://diigo.com/08we68
わからない でホストされていたアプリケーションと同じ プロジェクト内のクラスからのイベントを処理することはできません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" "追加されたモジュールからの世界" "&_ vbNewLine&" End Sub " –
こんにちは@MukulVarshney、提案のためのthx。しかし、ScriptControlにオブジェクトを追加した後で、オブジェクトにコードを追加する方法がわかりません。あなたはモジュールを追加すると言いますが、追加されたモジュールを追加されたオブジェクトにどのように関連づけますか?コードを表示できますか? -thx –