Тема: VBS: Word - как добавлять обработчики событий?
Нужно добавить обработчики на такие события как Open, Close, Save
Везде примеры для макросов, а для VBS ничего нет ![]()
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → Windows Script Host, HTA (VBScript, JScript) → VBS: Word - как добавлять обработчики событий?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Нужно добавить обработчики на такие события как Open, Close, Save
Везде примеры для макросов, а для VBS ничего нет ![]()
У тебя Word будет открыт в ActiveX'e?
Ну я создаю экземпляр через CreateObject("Word.Application"), в нем создаю документ
Или получаю уже открытый через GetObject(,"Word.Application")
Если готов использовать DynamicWrapperX + мои исправления к нему, то могу код показать.
Только кода там прилично, т.к. приходится анализировать библиотеку типов, искать интерфейс по-умолчанию, реализовывать свой IDispatch...и все это на VBScript
Кстати, а откуда ты vbs запускаешь?
Запускаю из-под HTA, хочу немножко доработать этот скрипт.
Боюсь, что DynamicWrapperX будет тяжеловат для моей пустяшной задачи ![]()
А это не поможет? http://www.rsdn.ru/article/com/eventsinscript.xml
chessman, спасибо за ссылку!
Вот только пример не работает...
Set MSWord = WScript.CreateObject("Word.Application", "MSWord_")
MSWord.Visible = True
Sub MSWord_Quit
MsgBox "Quit"
End SubОднако, работает:
Set MSWord = WScript.CreateObject("Word.Application", "MSWord_")
MSWord.Visible = True
Sub MSWord_Quit
MsgBox "Quit"
WScript.Quit
End Sub
'WScript.Sleep &H7FFFFFFF
Do: WScript.Sleep 1: Loop(Интересно, что если раскомментировать предпоследнюю строку, то WScript.Quit не прерывает WScript.Sleep и процесс WScript.exe не завершается.)
Do: WScript.Sleep 1: LoopНу я и фрося ![]()
wisgest, а как тоже самое сделать для документа?
Такой код уже не работает:
Set MSWordDoc = WScript.CreateObject("Word.Document", "MSWordDoc_")
MSWordDoc.Application.Visible = True
Sub MSWordDoc_Close
MsgBox "Close"
WScript.Quit
End Sub
Do: WScript.Sleep 1: LoopLeshikSan, код на форуме оформляется тэгом «code», а не тэгом «i». Исправьте.
Почти не разбираюсь в Office/VBA, поэтому не утверждаю, что предложенное решение наиболее грамотное, но вполне рабочее. Для ожидания закрытия документа можно в цикле с задержкой (в HTA можно использовать window.setInterval()) проверять доступность какого-либо из свойств документа:
Set MSWordDoc = WScript.CreateObject("Word.Document")
MSWordDoc.Application.Visible = True
On Error Resume Next
Do
IsEmpty MSWordDoc.Name
If Err.Number Then
MsgBox "Closed"
WScript.Quit
End If
WScript.Sleep 1
Loop
— использование именно функции IsEmpty(), вызываемой как процедура, здесь не существенно — вместо неё можно было использовать VarType(), UCase() и многие другие, или просто присваивать значение свойства переменной (но для этого, о ужас, понадобилось бы вводить дополнительную переменную). Можно было бы также воспользоваться тем, что TypeName(MSWordDoc) при закрытии документа меняет значение с "Document" на "Object".
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться