Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Запуск внешней программы, управление ею

Запуск макроса в заданное время

Можно запустить макрос не сразу, а через некоторое время или в заданное время. Это можно использовать для организации выдачи напоминаний или для проведения некоторых периодических работ, например, через каждые две минуты передавать изменяемый документ другому пользователю. Или, наоборот, заглянуть в некоторую папку, не появились ли там новые файлы, и т.п.

При помощи OnTime можно организовать ожидание завершения какой-то операции. Таким образом реализуется перемещение текущего документа в другую папку. Поскольку активный документ не может быть перемещен, то можно запустить при помощи Shell специальный документ-перемещалку, то есть документ, в котором через некоторое время после открытия будет запускаться макрос, перемещающий исходный файл.

В исходном файле с именем g:\try\ish.docm по закрытию документа выполняется следующий код, в котором вызывается MS Word с параметром – документом, содержащем макрос, выполняемый через заданное время.

Private Sub Document_Close()

ThisDocument.Save

Shell "e:\Program Files\Microsoft Office\Office12\WINWORD.EXE g:\Doc1.docm"

End Sub

В открытом файле Doc1.docm обработчик события Document_Open выглядит следующим образом:

Private Sub Document_Open()

Application.OnTime Now + TimeValue("00:00:15"), "Module1.replace"

End Sub

Наконец, в модуле содержится процедура replace, код которой перемещает исходный файл в некоторую папку.

Sub replace()

Dim fs As New Scripting.FileSystemObject

fs.MoveFile " g:\try\ish.docm ", " g:\arh\ish.docm"

Application.Quit True

End Sub

Внешнюю программу, то есть любой выполняемый файл, можно запустить, воспользовавшись функцией SHELL(полное имя, стиль окна). В случае успешного выполнения этой функции, она возвращает идентификатор задачи.

Очень важно то, что запуск внешней задачи при помощи Shell осуществляется в асинхронном режиме! Если же Вы запускаете внешнее приложение с помощью CreateObject или GetObject, то такой запуск осуществляется в синхронном режиме, по крайней мере, ожидается окончание выполнения кода обработчика события «открытие документа». Кроме того, при помощи Shell можно запустить любой выполняемый файл, а при помощи CreateObject – только COM-сервер.

Запущенным по команде Shell приложением можно управлять. Для этого следует его активизировать – оператор AppActivate, а затем отправить ему команды, имитируя клавиатурный ввод – оператор SendKeys. Второй параметр команды SendKeys определяет, ожидать или нет завершения указанной операции.

В примере ниже открывается «Блокнот», затем активизируется его окно. В текстовое окно записывается выражение, в котором складываются несколько подряд расположенных чисел (от 1 до 50). Затем закрывается окно Блокнота, причем передается имя файла для сохранения.

Dim RetVal

RetVal = Shell("E:\WINDOWS\NOTEPAD.EXE", 1) ' запуск блокнота

AppActivate RetVal ‘ блокнот располагается сверху всех окон

For i = 1 To 50 '

SendKeys i & "{+}", True ' в текстовое окно вносится выражение 1+2+3+..+50

Next

SendKeys "%{F4}", True ' закрываем окно

SendKeys "{ENTER}", True ' отвечаем на появившийся запрос, что хотим сохранить

SendKeys "g:\ttt{ENTER}{ENTER}", True ' задаем имя файла, и окно закрывается

<== предыдущая лекция | следующая лекция ==>
Вызов макроса с вычисляемым именем | Программное изменение кода
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 464; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.