1

Тема: VBS: Word - как добавлять обработчики событий?

Нужно добавить обработчики на такие события как Open, Close, Save
Везде примеры для макросов, а для VBS ничего нет

2

Re: VBS: Word - как добавлять обработчики событий?

У тебя Word будет открыт в ActiveX'e?

3

Re: VBS: Word - как добавлять обработчики событий?

Ну я создаю экземпляр через CreateObject("Word.Application"), в нем создаю документ
Или получаю уже открытый через GetObject(,"Word.Application")

4 (изменено: chessman, 2011-01-26 19:16:30)

Re: VBS: Word - как добавлять обработчики событий?

Если готов использовать DynamicWrapperX + мои исправления к нему, то могу код показать.
Только кода там прилично, т.к. приходится анализировать библиотеку типов, искать интерфейс по-умолчанию, реализовывать свой IDispatch...и все это на VBScript

5

Re: VBS: Word - как добавлять обработчики событий?

Кстати, а откуда ты vbs запускаешь?

6

Re: VBS: Word - как добавлять обработчики событий?

Запускаю из-под HTA, хочу немножко доработать этот скрипт.
Боюсь, что DynamicWrapperX будет тяжеловат для моей пустяшной задачи

7

Re: VBS: Word - как добавлять обработчики событий?

А это не поможет? http://www.rsdn.ru/article/com/eventsinscript.xml

8

Re: VBS: Word - как добавлять обработчики событий?

chessman, спасибо за ссылку!
Вот только пример не работает...

Set MSWord = WScript.CreateObject("Word.Application", "MSWord_")
MSWord.Visible = True
Sub MSWord_Quit
   MsgBox "Quit"
End Sub

9

Re: VBS: Word - как добавлять обработчики событий?

Однако, работает:

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 не завершается.)

10 (изменено: LeshikSan, 2011-01-31 14:10:27)

Re: VBS: Word - как добавлять обработчики событий?

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: Loop

11

Re: VBS: Word - как добавлять обработчики событий?

LeshikSan, код на форуме оформляется тэгом «code», а не тэгом «i». Исправьте.

12

Re: VBS: Word - как добавлять обработчики событий?

Почти не разбираюсь в 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".