Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава

Взаимодействие с другим и приложениями

Вэтой главе...

Запуск другого приложения из Excel

Активизация другого приложения с помощью Excel

Запуск аплетов папки Панель управления и мастеров

Автоматизация

Отправка почтовых сообщений с помощью Outlook

Отправка почтовых вложений с помощью Excel

Использование метода SendKeys

Вданной главе рассмотрены способы взаимодействия приложений Excel с другими приложениями. Кроме того, вы ознакомитесь с полезными примерами.

Запуск другого приложения из Excel

Иногда необходимо запустить другое приложение из Excel, например вызвать на вы­ полнение другую программу, запустить программу установки соединения или даже ко­ мандный файл DOS. Разработчик приложения также может облегчить пользователю до­ ступ к папке Панель управления.

Использование функции shell

Функция S h e ll упрощает запуск других приложений. Приведенная ниже процедура StartCalc используется для открытия калькулятора Windows.

Sub S ta r tC a lc ()

Dim Program As S t r in g

Глава 20. Взаимодействие с другими приложениями

639

струкции требуют вмешательства пользователя (например, при отображении окна сооб­ щения), то строка заголовка Excel будет мигать, пока активно другое приложение.

В некоторых случаях может понадобиться запустить приложение с помощью функ­ ции S h e ll, но при этом выполнение кода VBA должно прекратиться, пока запущенное

приложение не создаст файл, который будет использован далее в коде VBA. Несмотря на то что выполнение кода приостановить невозможно, вы вправе создать цикл, который, кроме отслеживания состояния запущенного приложения, не выполняет никаких функ­ ций. Ниже приведен пример окна сообщения, которое отображается на экране тогда, ко­ гда приложение, запущенное с помощью функции S h e ll, завершает свою работу.

Declare F u n c tio n

OpenProcess L ib

"k e rn e l3 2 "

_

 

 

(ByVal dwDesiredAccess As Long, _

 

 

 

 

ByVal

b ln h e ritH a n d le

As

Long,

_

 

 

 

 

ByVal

dw P rocessId As

Long)

As

Long

 

 

Declare F u n c tio n

G etE xitC odeP rocess

L ib "k e rn e l3 2 " _

 

(ByVal hProcess As Long, _

 

 

 

 

 

 

IpE xitC od e

As

Long)

As

Long

 

 

 

 

 

Sub S ta rtC a lc 2 ()

 

 

 

 

 

 

 

 

 

 

Dim TaskID

As

Long

 

 

 

 

 

 

 

 

Dim hProc

As

Long

 

 

 

 

 

 

 

 

Dim lE x itC o d e

As Long

 

STILL_ACTIVE

As

In te g e r

 

Dim ACCESS_TYPE

As In te g e r,

 

Dim Program As

S trin g

 

 

 

 

 

 

 

ACCESS_TYPE = &H4 00

 

 

 

 

 

 

 

 

STILL_ACTIVE = &H103

 

 

 

 

 

 

 

 

Program

=

11C a lc .e x e "

 

 

 

 

 

 

 

1

On E rro r

Resume

N ext

 

 

 

 

 

 

 

Определение оболочки

1)

 

 

 

 

 

1

TaskID

= S h e ll(P ro g ra m ,

 

 

 

 

 

Получение

дескриптора процесса

 

 

 

 

 

hProc = OpenProcess(ACCESS_TYPE,

F a ls e ,

TaskID)

 

I f E rr

<>

0 Then

 

 

 

 

 

 

v b C r it ic a l, "Ошибка"

 

MsgBox

"Невозможно запустить " & Program,

 

E x it

Sub

 

 

 

 

 

 

 

 

 

 

End I f

 

 

 

 

 

 

 

 

 

 

 

 

Do 1 Непрерывный цикл

'Проверка процесса

1

G etE xitC odeP rocess

hP roc, lE x itC o d e

Разрешить обработку

события

 

DoEvents

 

Loop W h ile lE x itC o d e =

STILL_ACTIVE

' Задача завершена, отображение сообщения

End

MsgBox Program & " закрыто"

Sub

 

После запуска приложения данная процедура будет постоянно вызывать функцию G e tE xitC o d e P ro ce ss в конструкции Do Loop. В цикле проверяется значение пере­ менной lE x itC o d e . Когда программа завершает работу, lE x itC o d e изменяет „свое

значение, цикл завершается, и код VBA продолжает выполняться.

640 Часть V. Профессиональные методы программирования

Компакт-диск

Оба рассматриваемых в разделе примера можно найти на прилагаемом к книге компакт-диске в файле s t a r t c a lc u la t o r .xlsm .

Использование API-функции ShellExecute

Функция Windows API S h e llE x e c u te обеспечивает запуск других приложений.

Примечательно, что другое приложение запускается только в том случае, когда откры­ ваемый файл имеет один из зарегистрированных в системе типов. Например, можете воспользоваться функцией S h e llE x e c u te для открытия веб-документа в окне браузе­

ра, выбранного по умолчанию. Либо, щелкнув на электронном адресе, можете открыть почтовый клиент, заданный по умолчанию.

Ниже представлено объявление этой API-функции (этот код работает только в Excel 2010).

P riv a te

D e cla re P trS a fe

F u n c tio n

S h e llE x e c u te

L ib

" s h e ll3 2 . d ll" _

A lia s

"S h e llE xe cu te A "

(ByVal

hWnd As Long,

_

 

ByVal

lp O p e ra tio n

As

S tr in g ,

ByVal

lp F ile

As S tr in g , _

ByVal

Ip P a ra m e te rs

As

S trin g ,

ByVal

lp D ir e c to r y

As S tr in g , _

ByVal nShowCmd As Long)

As Long

 

 

 

 

Следующая процедура демонстрирует вызов функции S h e llE x e c u te . В данном

случае с ее помощью запускается графический редактор, посредством которого в систе­ ме просматриваются файлы в формате JPG. Если возвращаемый функцией результат меньше 32, отображается сообщение об ошибке.

Sub

S how G raphic()

S trin g

 

 

 

Dim

FileNam e

As

 

 

 

Dim

R e s u lt

As

Long

 

" \ flo w e r . jp g "

 

FileName

=

T hisW orkbook. Path &

 

R e s u lt =

S h e llE x e c u te (0&,

v b N u llS tr in g , FileNam e, _

 

 

v b N u llS trin g ,

v b N u llS tr in g ,

vbNorm alFocus)

 

I f

R e s u lt

 

< 32 Then MsgBox

"Ошибка"

End

Sub

 

 

 

 

 

 

Приведенная ниже процедура открывает текстовый файл с помощью заданного по умолчанию текстового редактора.

Sub

O p e n T e x tF ile ()

 

 

 

Dim

FileName

As

S trin g

 

 

Dim

R e s u lt

As

Long

 

 

 

FileName

=

T hisW orkbook. Path &

" \ t e x t f i l e . t x t "

 

R e s u lt =

S h e llE x e c u te (0&,

v b N u llS tr in g , FileNam e, _

 

 

v b N u llS trin g ,

v b N u llS trin g ,

vbNorm alFocus)

 

I f

R e s u lt

<

32 Then MsgBox

"Ошибка"

End

Sub

 

 

 

 

 

 

Ниже приводится похожий пример, но здесь открывается URL-ссылка с помощью за­ данного по умолчанию браузера.

Sub

OpenURL()

 

 

 

 

Dim

URL As

S trin g

 

 

 

Dim

R e s u lt

As Long

 

 

 

URL

= " h ttp ://s p re a d s h e e tp a g e .c o m "

 

 

R e s u lt = S h e llE x e c u te (0&,

v b N u llS trin g , URL, _

*•

 

 

v b N u llS trin g , v b N u llS trin g , vbNorm alFocus)

 

End

I f

R e s u lt

< 32 Then MsgBox

"Ошибка"

 

Sub