Все документы, которые я прочитал в 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 и обработки событий, запускаемых этим элементом управления. Не волнует, является ли объект пользовательским классом, формой, элементом управления или встроенным объектом Excel, таким как рабочий лист.
Запуск Office 2010 32bit на Win Server 2008 64bit.
Открыть чередовать методы, такие как WSH, но Tushar Мехта не имели успеха с этим здесь http://dailydoseofexcel.com/archives/2009/08/19/using-vbscript-to-monitor-office-eventsor-not/
Я успешно добавлен объект Excel Application в ScriptControl, и выполняется код на объект 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 ("Global") 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
Я не проверял следующее, потому что я не совсем уверен, как:
контроль сценарий не может обрабатывать события из класса в том же проекте как приложение это время организовано в 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» «Привет, мир из добавленного модуля». "& _ vbNewLine &" End Sub " –
привет @MukulVarshney, thx для предложения. Но я не знаю, как добавить код к объекту, после добавления объекта в ScriptControl. Вы говорите, что хотите добавить модуль, но как связать добавленный модуль с добавленным объектом? Можете ли вы показать код? -thx –