Передача данных между приложениями Windows, страница 2

n  использовать Object Brouser  (вид/просмотр объектов) для просмотра объектов, их методов и свойств.

Пример работы как с объектами Excel, так и Project

Sub GetTask()

                    Dim msProj As Object, aTask As String

Запуск Project и открытие файла:

                    MSProject.Application.FileOpen Name := “I:\BVN\BOOKPLAN.MPP”

Сохранение имени первой задачи в переменной

                    aTask =     MSProject.Application.Projects(1).Task(1).Name

Отображение имени задачи в ячейке таблицы:

                    Sheets(“Лист1”).Range(“A1”).Value = aTask

Закрытие файла и завершения программы Project:

                    MSProject.Application.FileExit

End Sub

Объекты разных приложений могут иметь одни имена, поэтому желательно использовать полные их имена:

Application.Name - даст имя Excel

MSProject.Application.Name - даст имя Project.

Многие программы остаются невидимыми после старта с помощью OLE Automation. Такие программы не отображаются в списке задач. Чтобы сделать такую программу видимой после старта надо установить свойство Visible этой программы в True:

MSProject.Application.Visible = True

Создание и открытие объектов через OLE Automation для частично OLE согласованных программ осуществляется методами.

n  метод 1 - CreateObject() - создает новый объект

n  метод 2 - GetObject() - открывает существующий объект

Для полностью OLE согласованных программ (MS Offise) осуществляется методами связных объектов.

Set объектная_переменная = CreateObject(класс)

Класс состоит из двух частей:

Регистрационное_имя.Объект

Пример: Set xl = CreateObject(“Excel.Sheet”)  -  создается новый лист в Excel

Set PS = CreateObject(“MSProject.Project”) - запускается Project с новой чистой страницей

3

 
                    Set  WS = CreateObject(“Word.Basic”) - запускает Word

Пример использования GetObject:

Set Объектная_переменная = GetObjec(имя_файла, класс)

Set XL = GetObjec (“D:\Proj\Cost.XLS”, “Excel.Sheet”)

Внедрение объектов в программу:

Sub LinkToWord ()

                    Dim WordObj As Object, ChannelNun As Integer

Выбор и копирование таблицы                   

                    Sheets(“Лист1”).Select

                    Range(“A1:F6”).Select

                    Selection.Copy

Запуск Word

                    Set WO = CreateObject(“Word.Basic”)

                    AppActivate “Microsoft Word”

                    WO.FileNew

Применение DDE для передачи дерективы

ChannelNum =Application.DDEInitiate (“WinWord”, “System”)

Следующую команду рекомендую записамт макро рекордером и потом вставить

                    DDEExecute ChannelNum, “[EditPasteSpecial .Link=1, .Class=””Excel.Sheet.5””,  .DataType = “”Object””]”

                    DDETerminate ChannelNum

End Sub

Экспериментируя с OLE Вы можете столкнуться с проблемой - разрушение системы.

5.   Передача нажатий клавиш программам под Windows

Используется только тогда, когда нельзя воспользоваться DDE или OLE.

Оператор SendKeys в качестве своих аргументов передает любые символы любой программе, имеющей активное окно. Поэтому программу сначала надо сделать активной:

AppActivate Заголовок_окна

AppActivate  MSProject.Application.Caption

Имеется оператор  Shell:   ID = Shell (путь, стиль_окна)

Код стиля

Описание

1, 5, 9

Обычное с фокусом

2

Минимизированное с фокусом

3

Максимизированное с фокусом

4, 8

Обычное без фокуса

6, 7

Минимизированное без фокуса

hwin = Shell (“I:\Win\Winword.exe”, 3)

SendKeys  строка, ждать строка - нажатие клавиш ждать - если его нет или False все нажатия передаются в буфер обмена и пока программа не перешла в режим ожидания или не выполнила оператор DoEvents - не получит их

True - получит их немедленно