Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskoe posobie dlya VBA for Excel.303.doc
Скачиваний:
9
Добавлен:
01.05.2025
Размер:
990.72 Кб
Скачать

Открытие коммуникационного канала dde.

Чтобы открыть канал DDE с другой программой , эта программа в первую очередь должна быть запущена. Для запуска используйте операторы Shell и AppActivate. Будьте осторожны при использовании оператора Shell: эта команда запускает программу не синхронно и следующий оператор вашей программы может выполниться прежде , чем начнёт работать вторая программа. После команды Shell потребуется пауза , которая позволит пропустить время инициализации и старта указанной программы.

Для инициализации связи между двумя выполняющимися программами используется метод DDEIniate, который имеет следующий синтаксис:

канал = DDEInitiate(программа, тема)

Аргументы программа и тема являются строками. Чтобы определить, какие значения аргументов используются, обратитесь к документации на программу. Этот метод возвращает номер канала, используемый в других командах Visual Basic для идентификации данного коммуникационного канала. При выполнении метода устанавливается соединение DDE между Visual Basic for Applications и другой программой.

Закрытие канала dde.

После завершения использования канала DDE его необходимо закрыть с помощью метода DDETerminate, имеющего следующий синтаксис:

DDETerminate(канал)

В данном случае канал - это номер канала, полученный от метода DDEInitiate.

Получение информации от сервера.

Чтобы запросить данные от сервера по открытому коммуникационному каналу, используется метод DDERequest, имеющий следующий синтаксис:

Переменная = DDERequest(канал, элемент)

Аргумент канал является номером канала , возвращённым методом DDEInitiate, а элемент указывает на определённую часть необходимых данных. Переменная представляет собой имя переменной, принимающей указанные данные. Эта переменная должна быть типа Variant.

В качестве примера создайте в Excel страницу диалога, которая использует DDE для получения строки текста из Word. В Word выделите предложение , укажите директиву Edit/Bookmark и назовите полученную закладку BookMark1. Затем переключитесь в Excel и запишите в модуле три приведённые ниже процедуры . Замените в этих процедурах ссылку на документ 26VBAOR.DOC ссылкой на один из ваших документов.

Option Explicit

Dim ChannelNum As Integer

Dim Results

‘Установление связи DDE с Word и получение предложения.

Sub OpenChannel()

‘Запуск Word и открытие документа 26VBAOR.DOC

‘Замените имя документа и путь на атрибуты одного из ваших документов

ChannelNum = DDEInitiate (“WinWord”, “I:\BHV_VBA\26BAOR.DOC”)

‘Отображение номера канала в диалоговом окне.

DialogSheets(“DDEDialog”).EditBoxes(“DDEChannelBox”).Text = _ChannelNum

End Sub

‘Получение данных.

Sub GetData()

Results = DDERequest (ChannelNum, “BookMark1”) ‘Запрос данных.

‘Отображение данных в диалоговом окне.

DialogSheets (“DDEDialog”). EditBoxes (“DDEDataBox”). Text = Results

End Sub

‘Закрытие связи.

Sub CloseChannel ( )

DDETerminate (ChannelNum)

End Sub

Создайте страницу диалога, назовите её DDEDialog; добавьте к ней три командные кнопки, две метки и два текстовых окна. Назовите текстовое окно, расположенное под меткой «Результат», DDEDataBox, а второе текстовое окно – DDEChannelBox. Для подключения командной кнопки “Открыть DDE” к процедуре OpenChannel, командной кнопки “Принять данные” – к процедуре GetData и командной кнопки “Закрыть DDE” – к процедуре CloseChannel используйте директиву Tools/Assign Macro.

На пиктографическом меню Forms нажмите пиктограмму Run Dialog, затем на бланке нажмите командную кнопку “Открыть DDE”. Нажатие этой кнопки инициирует выполнение процедуры OpenChannel, которая открывает канал к программе Word for Windows (WinWord), затем запрашивает документ 26BAOR.DOC и отображает номер канала в окне DDEChannelBox.

Нажатие командной кнопки “Принять данные” инициирует выполнение процедуры GetData, запрашивающей содержимое закладки BookMark1. Если текст закладки будет обнаружен, то он отобразится в окне DDEData.

С Для закрытия канала DDE нажмите командную кнопку “Закрыть DDE”.

Передача информации серверу.

Чтобы послать информацию серверу, используется метод DDEPoke. Этот метод имеет следующий синтаксис:

DDEPoke (канал, элемент, данные)

Аргумент элемент указывает текст на сервере , который подлежит замене, а аргумент данные содержит текст, заменяющий текст на сервере. Единственной проблемой при использовании этого метода является то, что аргумент данные должен быть областью таблицы и не может быть простой строкой. Возможно, в будущих версиях Excel эта проблема будет устранена.

Для примера, добавьте процедуру, посылающую программе Word некоторый текст, который заменяет текст, маркированный как закладка BookMark1. Вначале добавьте к бланку командную кнопку “Послать данные”. Затем подключите эту кнопку к следующей процедуре:

‘Пересылка данных.

Sub PokeChannel ( )

‘Копирование данных из диалогового окна в ячейку таблицы.

Sheets (“Sheet1”). Cells(1, 1). Formula = _

DialogSheets(“DDEDialog”) . EditBoxes(“DDEDataBox”). Text

‘Создание ссылки на ячейку таблицы.

Set Result = Sheets(“Sheet1”). Cells(1, 1)

‘Пересылка ссылки на ячейку связанной программе для замены текста, маркированного как

‘BookMark1.

Application.DDEPoke ChannelNum, “BookMark1”, Result

End Sub

На пиктографическом меню Forms нажмите пиктограмму Run Dialog, затем на бланке нажмите командную кнопку “Открыть DDE” для подключения к Word. Для копирования текущего содержимого закладки BookMark1 в текстовое окно “Результат” нажмите командную кнопку “Принять данные”. В верхней части экрана расположено окно Word for Windows , на котором видна строка текста, маркированная как BookMark1. В нижней части экрана расположено окно Excel с диалоговым окном “Тестер DDE ” , на котором в текстовом окне “Результат” виден тот же текст.

Теперь текст находящийся в приемном окне "Результат" можно редактировать. Чтобы этот отредактированный текст заменилзаменил собой текст , маркированый как BookMark1 ,нажмите кнопку "Послать данные".

Процедура PokeChannel1 сначала копирует содержимое текстового окна в ячейку А1 таблицы Sheet1 . Затем это значение загружается как объект в переменную Result. Запомните , что метод DDEPoke должен должен получить в качестве в качестве аргумента не строку , а ссылку на область ячеек , содержащих этот текст . Затем метод DDEPoke передаёт этот текст в Word , где он заменяет собой текст , маркированный как BookMark1 . Для закрытия связи нажмите командную кнопку "Закрыть DDE".

Передача директив серверу.

Кроме передачи программе некотрох данных , связь DDE позволяет предать и директивы. Дитективы , которые вы хотите передать прогремме , должны быть на командном языке той программы , которой вы их передаёте.

Чтобы передать директивы подключённой программе , используется метод DDEExecute , имеющий следующий синтаксис :

DDEExecute ( канал , командная_строка)

Аргумент канал является номером канала DDE , а аргумент командная_строка - строкой, содержащей директиву для подключенной программы.

Перешлите программе Word директиву File/Print Preveiw. Для этого добавьте кдиалоговому окну "Тестер DDE" командную кнопку "ПредПросмотр" и подключите ее к следующей процедуре:

Sub PreveiwIt ()

' Пересылка связанной програме директивы предварительного просмотра.

DDExecute ChannelNum , "[FilePrintPreview]"

End Sub.

Обратите внимание на то , что директива FilePrintPreview заключена в квадратные скобки . Если вы опустите скобки , то Word вставит эту директиву как текст в точку вставки а не выполнит её как директиву.