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

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

647

лается на новое приложение. Но если удалить Word 2010, то функция

C r e a t e ­

O b je ct ( "W o rd . A p p lic a t io n . 1 4 "), обращающаяся непосредственно к Word 2010,

работать не будет.

Функция C re a te O b je c t, которая обращается к таким объектам автоматизации, как

W o r d .A p p lic a tio n или E x c e l . A p p lic a t io n , всегда возвращает новый экземпляр

объекта, т.е. запускается новая копия приложения. Поэтому в случае, когда объект авто­ матизации уже запущен, запускается новый экземпляр, после чего создается новый объ­ ект указанного типа.

Для того чтобы использовать текущий экземпляр или чтобы запустить приложение и заставить его загрузить сохраненный файл, воспользуйтесь функцией G e tO b j e c t.

Примечание

Для использования автоматизации в приложениях Office рекомендуется вы­ полнить раннее связывание с самой ранней версией программного продук­ та, который установлен в системе. Например, чтобы реализовать автомати­ зацию с Word 2003, Word 2007 и Word 2010, следует использовать библиоте­ ку объектов Word 2003 для обеспечения совместимости со всеми тремя версиями. Таким образом, гарантируется невозможность использования уникальных функций, предоставляемых более поздними версиями Word.

Простой пример позднего связывания

Приведенный пример демонстрирует создание объекта Word с помощью позднего свя­ зывания. Рассматриваемая процедура создает объект, отображает номер версии, закрывает приложение Word и уничтожает созданный объект (освобождая используемую память).

Sub G etW ordV ersion()

Dim WordApp

As

O b je c t

Set WordApp

=

C re a te O b je c t( "W o rd .A p p lic a tio n ")

MsgBox WordApp.Vers io n

W ordApp.Quit

 

 

Set WordApp

= N o th in g

End Sub

 

 

Примечание

Созданный с помощью приведенной выше процедуры объект Word является невидимым. Если нужно, чтобы в процессе обработки этот объект отображал­ ся на экране, присвойте свойству v is ib le значение True, как показано ниже.

W o rd A p p .V is ib le = True

Данный пример можно запрограммировать с помощью раннего связывания. Однако вначале воспользуйтесь командой Tools'^References (Сервис^Ссылки) для создания

ссылки на библиотеку объектов Word. После этого можете применить приведенный ниже код.

Sub G etW ordVersion ()

Dim WordApp As New W o rd .A p p lic a tio n MsgBox W ordA pp.V ersion

WordApp. Q u it

Set WordApp = N o th in g End Sub

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

649

 

. Docum ents.Add

 

 

 

 

 

 

 

W ith

.S e le c tio n

 

 

 

 

 

 

 

.F o n t.S iz e = 14

 

 

 

 

 

 

.F o n t.B o ld

=

True

 

 

 

 

 

. P a rag ra ph F orm a t.A lig n m e nt = 1

 

 

 

.TypeText

T e xt:= "M

Е М О Р А Н Д У М "

 

 

. TypeParagraph

 

 

 

 

 

 

. TypeParagraph

 

 

 

 

 

 

.F o n t.S iz e = 12

 

 

 

 

 

 

. P a rag ra ph F orm a t.A lig n m e nt = 0

 

 

 

.F o n t.B o ld

=

F alse

 

 

 

 

 

.T ypeT ext

T e x t: ="Дата:"

& vbTab & _

 

 

 

F orm at(D ate,

"d

mmmm,

y y y y " )

 

 

. TypeParagraph

 

 

 

 

 

 

.T ypeT ext

T e x t:= "Получатель:"

& vbTab

& _

 

 

"Менеджер,

"

& R egion

 

 

 

 

. TypeParagraph

 

 

 

 

 

 

.T ypeText

T e x t:= "Отправитель:"

& vbTab

& _

 

 

A p p lica tio n .U se rN a m e

 

 

 

 

. TypeParagraph

 

 

 

 

 

 

. TypeParagraph

 

 

 

 

 

 

.TypeText

Message

 

 

 

 

 

. TypeParagraph

 

 

 

 

 

 

. TypeParagraph

 

 

 

 

позиций:" _

 

.T ypeText

T e x t:= "Количество проданных

 

 

& vbTab

Sc

SalesNum

 

 

 

 

. TypeParagraph

 

 

 

 

 

 

. TypeText

T e x t:= " Сумма:"

& vbTab & _

 

 

 

F orm at(S alesA m t,

"$ # ,# # 0 ")

 

 

 

End W ith

 

 

 

 

 

 

 

 

.A ctive D o cu m e n t. SaveAs

FileN am e:= SaveAsName

 

End W ith

 

 

 

 

 

 

 

 

1

Next i

 

 

 

 

 

 

 

 

Удаление объекта

 

 

 

 

 

 

 

 

W ordApp.Quit

 

 

 

 

 

 

 

1

Set WordApp

= N o th in g

 

 

 

 

 

 

Обновление

строки состояния

 

 

 

 

 

A p p lic a tio n .S ta tu s B a r

=

""

 

 

 

 

 

MsgBox Records & "

заметок создано и сохранено в " & _

 

A p p lic a tio n .D e fa u ltF ile P a th

 

 

 

End Sub

 

 

 

 

 

 

 

 

Нарис. 20.7 показан один из документов, созданных с помощью процедуры MakeMemos.

©Рассматриваемая в этом разделе рабочая книга находится на прилагаемом компакт-диске в файле make memos . xlsm .Компакт-диск

Этот макрос создавался в несколько этапов. Все началось с его записи в Word. Запи­ сывались действия по созданию нового документа, добавлению и форматированию тек­ ста, а также сохранению файл! Этот макрос Word предоставил необходимую информа­ цию о свойствах и методах объекта Word. После этого макрос был скопирован в модуль кода Excel. Обратите внимание, что использовался оператор W ith -E n d W ith . Т1еред каждой инструкцией между W ith и End W ith была добавлена точка. Например, перво­

начальный макрос Word содержал (среди прочих) приведенный ниже оператор.

Documents .Add

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

651

Dim

LoanAmt

 

 

Dim

Wbook

As S trin g

 

 

1 Запрос

значений

кредита?")

 

LoanAmt

=

In p u tB o x ( "Сумма

 

I f

LoanAmt

= "" Then E x it

Sub

 

1 Очистка документа

ThisD ocum ent. C o n te n t. D e le te

'Создание объекта Sheet

 

Wbook = ThisD ocum ent. Path &

"\m o rtg a g e c a lc s .x ls x "

 

Set XLSheet = G etO bject(W book,

"E x c e l. S h ee t" ) .A c tiv e S h e e t

1

Передача значений в лист

 

 

1

XLSheet. Range( " LoanAmount")

=

LoanAmtXLSheet. C a lc u la te

Вставка заголовка

страницы

 

 

 

S e le c tio n . S ty le =

"Заголовок"

 

 

S e le c tio n .T y p e T e x t

"Величина

кредита: " & _

 

Form at(LoanA m t,

"$ # ,# # 0 ")

 

 

Se le c tio n . TypeParagraph

Se le c tio n . TypeParagraph

1Копирование данных с листа и их вставка в документ

XLSheet. Range( "D a ta T a b le " ) . Copy

Se le c tio n . Paste

S e le c tio n . TypeParagraph

S e le c tio n . TypeParagraph

1Копирование и вставка в документ диаграммы

XLSheet. C hartO bj e c ts (1) . Copy

S e le c tio n . P a ste S p e cia l _

L in k := F a ls e , _

D ataT ype: = w d P a s te M e ta file P ic tu re , _

P la ce m e n t: =w dInLine

1 Уничтожение

объекта

Set XLSheet

= N o th in g

End Sub

 

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

Рассматриваемый в этом разделе пример находится на прилагаемом к книге компакт-диске. Документ Word находится в файле automate excel.docm , а рабочая книга Excel — в файле m o rtg a g e ca lcs .x ls x . После открытия до­ кумента Word вызовите на выполнение макрос MakeLoanTable, выполнив команду BcTaBKa^Mortgage^Get Mortgage Amount (Вставка^Ипотека^Получить размер ипотеки).

Рабочая книга Excel, используемая этой процедурой Word, показана на рис. 20.8. Процедура M a ke L o a n T a b le запрашивает у пользователя размер кредита и вставляет значение в ячейку С7 (под именем LoanA m ount).

Пересчет рабочего листа приводит к обновлению таблицы данных в диапазоне F2:I12 (под названием D a ta T a b le ), а также обновляет диаграмму. Затем диапазон D a ta ­ Table и диаграмма копируются из объекта Excel и вставляются в документ Word. Ре­

зультат показан на рис. 20.9.

656

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

вложения удалите временный файл. Ниже приведен пример отправки листа Лист1 актив­ ной рабочей книги.

Sub

S endasheet()

 

A ctive W o rkb o o k . W o rksh e e ts( " Лист1" ) . Copy

 

A ctive W o rkb o o k . SendM ail " jo e b lo w @ z x -p rrtg fw .c o m ", "Мой лист"

 

A ctive W o rkb o o k . C lose F alse

End

Sub

В предыдущем примере файлу было присвоено имя рабочей книги по умолчанию (например, Книга2 . x ls x ) . Для того чтобы рабочей книге, включающей один рабочий

лист и пересылаемой во вложении, присвоить более значимое имя, придется сохранить файл на диске и удалить его после отправки. В следующей процедуре лист Лист1 со­

храняется в файле Мой

файл.x ls x . После отправки временная рабочая книга в виде

вложения удаляется с помощью оператора VBA K i l l .

Sub

SendOneSheet()

 

 

Dim

Filenam e As

S tr in g

 

Filenam e

= "Мой

файл.x ls x "

A ctive W o rkb o o k . W o rksh e e ts( " Л ист1" ) . Copy

 

A ctive W o rkb o o k . SaveAs Filenam e

 

A c t iveW orkbook. SendM ail " j o 'e b lo w @ zx -p rrtg fw . com" , "Мой лист"

 

A ctive W o rkb o o k . C lose F alse

 

K i l l

Filenam e

 

End

Sub

 

 

 

 

 

Примечание

 

 

К сожалению, в Excel отсутствует способ автоматического сохранения рабо­

 

 

чей книги в виде PDF-файла с последующей отправкой этого файла в виде

 

 

почтового вложения. Однако в ваших силах автоматизировать часть этого

 

 

процесса. Ниже представлен код процедуры SendSheetAsPDF, которая со­

 

 

храняет активный лист в виде PDF-файла, а затем отображает окно состав­

 

 

ления сообщения почтового клиента, заданного по умолчанию (с вложенным

 

 

PDF-файлом). Пользователю остается указать имя получателя и щелкнуть на

 

 

кнопке Отправить (Send).

 

 

Sub

SendSheetAsPDF()

 

 

End

CommandBars.ExecuteMso ( "F ile E m a ilA s P d fE m a ilA tta c h m e n t")

 

 

Sub

 

Когда Excel “выбивается из сил”, на сцену “выходит” Outlook. Следующая процедура сохраняет активную рабочую книгу в виде PDF-файла, а также автоматизирует Outlook таким образом, что создается электронное сообщение с вложенным PDF-файлом.

Sub

SendAsPDF()

раннее

связывание

 

1

Используется

библиотеку O u tlo o k

1

Требуется ссылка

на

объектную

 

Dim

O utlookApp As

O u tlo o k .A p p lic a tio n

 

Dim

MItem As

O b je ct

 

Subj

As S trin g

 

Dim

R e c ip ie n t

As

S trin g ,

 

Dim

Msg As S trin g ,

Fname

As S trin g

'Подробности сообщения

R e c ip ie n t =

"m yboss@ xrediyh.com "

**

Subj = "Отчет по продажам"

 

Msg

= "Босс,

вот требуемый PDF-ф айл."

Msg

= Msg & vbNewLine & vbNewLine &

"-Ф ранк"

Fname = A p p lic a tio n . D e fa u ltF ile P a th

& " \ " & _