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

362

Часть III. Visual Basic for Applications

Функция GetV alue принимает четыре аргумента:

p a th — путь к закрытому файлу (например, " d : \ f ile s " ) ;

f i l e — название рабочей книги (например, "budget .x ls" );

s h e e t — название рабочего листа (например, "Л ист1");

r e f — ссылка на ячейку (например, "С4п).

Следующая процедура демонстрирует, как используется функция G etV alue. В этой процедуре отображается значение ячейки А1 листа Лист1 файла 2010Budget .x lsx (папка X L F iles\B u d g et на диске С:).

Sub

T e s tG e tV a lu e ()

f As

S trin g

Dim

р

AsS trin g ,

Dim

s

AsS trin g ,

a As

S trin g

p

=

"c :\X L F ile s \B u d g e t"

f =

"2 0 1 0 b u d g e t.x ls x "

 

s

=

" J I h c t I "

 

 

a

=

"A l"

f ,

s, a)

MsgBox

G e tV a lu e (p ,

End

Sub

 

 

 

 

Ниже приведен еще один пример. Эта процедура считывает 1200 значений (100 строк и 12 столбцов) из закрытого файла и помещает эти значения на активный рабочий лист.

Sub

T e stG e tV a lu e 2 ()

f As

S trin g

Dim

р

AsS trin g ,

 

Dim

s

AsS trin g ,

с

a As

S trin g

Dim

r

As

Long,

As

Long

p

=

"c :\X L F ile s \B u d g e t"

f

= "2 0 1 0 B u d g e t.x ls x "

 

s

=

"Лист1"

 

 

 

 

 

A p p lic a tio n . S creenU pdating = F alse

For

r

=

1

To

100

 

 

 

 

For

с

=

1

To

12

c ).A d d re s s

 

 

 

a

=

C e lls ( r ,

 

 

 

C e lls ( r ,

c)

=

G e tV a lu e (p , f , s, a)

 

N ext

с

 

 

 

 

 

 

N ext

r

 

 

 

 

 

 

 

 

End

Sub

 

 

 

 

 

 

 

 

 

(3 )

Примечание

Функция GetValue не работает, если ее использовать в формуле рабочего

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

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

Описанный в этом разделе пример можно найти на прилагаемом к книге компакт-диске в файле v a lu e from a c lo s e d workbook .xlsm . При рабо­ те с закрытым файлом в примере используется файл m yworkbook. x ls x .

Полезные функции в формулах Excel

Примеры, приведенные в этом разделе, представляют пользовательские функции, ко­ торые можно применять в формулах рабочего листа. Помните, что эти процедуры функ­ ций необходимо определить в модуле VBA, а не в модуле кода соответствующей рабо­ чей книги Эта книга (ThisWorkbook), листа или пользовательской формы (UserForm).

Глава 11. Приемы и методы программирования на VBA

363

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

Примеры из этого раздела можно найти на прилагаемом к книге компактдиске в файле w orksheet fu n c tio n s . xlsm .

Получение информации о форматировании ячейки

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

Предупреждение

©Вскоре вы сможете убедиться в том, что эти специальные функции не всегда обновляются автоматически — изменение форматирования не приводит

к пересчету формул Excel. Чтобы вызвать глобальный пересчет формул (и обновить все пользовательские функции), нажмите клавиши <Ctrl+Alt+F9>.

В функцию можно также добавить следующий оператор:

A p p lic a tio n . V o la tile

При наличии этого оператора пересчет функции производится после нажатия клавиши <F9>.

Следующая функция возвращает ИСТИНА, если аргумент, состоящий из одной ячей­ ки, выделен полужирным шрифтом. Если диапазон передается в качестве аргумента, функция использует его верхнюю левую ячейку.

Function Is B o ld ( c e ll) As Boolean

1 Возвращает ИСТИНА, если ячейка выделена полужирным

IsBold = c e ll.R a n g e ( " A l" ) . F o n t.B o ld End Function

Помните о том, что эти функции работают только с явно заданным форматированием (не могут применяться с условным форматированием). В Excel 2010 появился новый объект под названием D is p la y F o rm a t. Он учитывает наличие условного форматиро­ вания. Ниже показан код функции Is B o ld , который может обрабатывать полужирный формат, являющийся результатом условного форматирования.

Function Is B o ld ( c e ll) As Boolean

1 Возвращает ИСТИНА даже в случае условного форматирования

IsBold = c e ll.R a n g e ( " A l" ) . D is p la y F o rm a t. F o n t.B o ld End Function

Следующая функция возвращает ИСТИНА, если используемая в качестве аргумента однаячейка выделена курсивом.

Function I s l t a l i c ( c e l l ) As Boolean

1 Возвращает ИСТИНА, если ячейка выделена курсивом

I s lt a lic = c e l l . Range( " A l" ) . F o n t. I t a l i c End Function

Обе предыдущие функции возвращают ошибку, если ячейка имеет смешанное фор­ матирование (например, полужирным шрифтом отображены только отдельные симво­ лы). Функция, приведенная ниже, возвращает ИСТИНА только тогда, когда все символы в ячейке выделены полужирным шрифтом.

Function A llB o ld ( c e ll) As Boolean

' Возвращает ИСТИНА, если все символы в ячейке

364

Часть III. Visual Basic for Applications

'выделены полужирным

I f

I s N u ll ( c e l l . F o n t. B old) Then

A llB o ld

=

F alse

E lse

=

c e l l . F o n t.B o ld

End

A llB o ld

I f

 

 

End F u n c tio n

Функцию AllBold можно упростить.

F u n c tio n A llB o ld ( c e ll) As

Boolean

1

Возвращает ИСТИНА, если

все символы в ячейке

'

выделены полужирным

 

A llB o ld = Not I s N u ll ( c e l l . F o n t. B old)

End F u n c tio n

Функция Fill Color, представленная далее, возвращает целое число, соответст­ вующее индексу цвета фона ячейки (цвета заливки ячейки). Если ячейка не имеет залив­ ки, то функция возвращает значение 4142.

Эта функция не может использоваться для определения цветов заливки таблиц (которые создаются с помощью команды Вставка^Таблицы^Таблица (Insert^Tables1 Table)) или сводных таблиц. В подобных случаях воспользуйтесь объектом DisplayFormat, как описывалось ранее.

F u n c tio n

F illC o lo r ( c e ll) As

In te g e r

'

Возвращает целое число,

соответствующее

'

цвету

ячейки

 

F illC o lo r = c e ll.R a n g e ( " A l" ) . I n t e r i o r . C o lo rln d e x

End F u n c tio n

Беседа с рабочим листом

Функция Say I t применяет синтезатор речи Excel для “проговаривания” аргументов, в качестве которых используется текст или ссылка на ячейку.

F u n c tio n S a y lt ( t x t )

A p p lic a tio n .S p e e c h .S p e a k ( t x t )

S a y lt = t x t

End F u n c tio n

Эта функция носит развлекательный характер, но может использоваться и в серьез­ ных целях. Например, ее можно включить в следующую формулу:

=IF (SUM (А:А) >25000, S a y lt ( "Цель достигнута " ) )

Если сумма значений в столбце А превышает 25000, вы услышите синтезированный голос, сообщающий о том, что цель достигнута. Метод Speak можно также включить в конец длинной процедуры — спустя некоторое время компьютер известит вас о том, что выполнение процедуры завершено.

Отображение даты сохранения файла или вывода файла на печать

Рабочая книга Excel содержит несколько встроенных свойств документа, к которым мож­ но получить доступ с помощью свойства BuiItinDocumentProperties объекта Work­ book. Следующая функция возвращает дату и время последнего сохранения рабочей книги.

F u n c tio n LastS avedO

A p p lic a tio n . V o la tile LastS aved = ThisW orkbook.

Глава 11. Приемы и методы программирования на VBA

365

B u iItin D o c u m e n tP ro p e rtie s ( "Время последнего сохранения

")

End F u n ctio n

 

Значения даты и времени, возвращаемые этой функцией, совпадают со значениями даты и времени, которые отображаются в разделе Связанные даты (Related Dates) окна представления Backstage. Это окно отображается после выбора команды Файл1^ Сведения (File^Info). Обратите внимание, что на значения даты и времени оказывает влияние свойство A u to S a v e . Поэтому “время последнего сохранения” необязательно имеет отношение ко времени сохранения файла пользователем.

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

Function L a s tP rin te d () A p p lic a tio n . V o la tile

L a s tP rin te d = ThisW orkbook. _

B u iltin D o c u m e n tP ro p e rtie s ( "Д ата последнего вывода на п ечать ")

End F u n ctio n

При использовании этих функций в формуле необходимо вызвать пересчет формул (клавиша <F9>), чтобы получить текущие значения данных свойств.

Примечание

Существуют еще несколько встроенных свойств, но Excel их не использует. Например, при попытке получить доступ к свойству Number o f Bytes, указывающему размер файла, будет генерироваться ошибка. Для получения списка встроенных свойств обратитесь к справочной системе.

Приведенные выше функции la s tS a v e и la s t P r in t e d предназначались для со­ хранения в той рабочей книге, в которой они используются. В отдельных случаях требу­ ется сохранить функцию в книге, отличной от той (например, p e r s o n a l .x ls b ) , в ко­ торой она используется, или в надстройке. Поскольку все функции ссылаются на книгу Эта книга (ThisWorkbook), то выполняться корректно они не будут. Следуйте приведен­ ным ниже инструкциям для создания универсальных функций. В данных процедурах ис­ пользуется метод A p p lic a t io n . C a lle r , который возвращает объект Range. Этот объект указывает на ячейку, из которой вызывается функция. Оператор P a r e n t . P a re n t возвра­ щает рабочую книгу (родитель родителя объекта Range — объект W orkbook). Взаимоот­ ношения родительских и дочерних объектов детально рассмотрены далее.

Function LastS aved2()

 

A p p lic a tio n . V o la tile

 

LastSaved2 = A p p lic a tio n . C a lle r . P a re n t. P a re n t.

_

B u iltin D o c u m e n tP ro p e rtie s ( "Время последнего

сохранения")

End F un ction

 

Основы иерархии объектов

Объектная модель Excel представляет собой определенную структуру: одни объекты содержатся в других объектах. На вершине этой иерархии находится объект A p p lic a ­ tio n . Excel содержит другие объекты, в которые, в свою очередь, вложены более низко­ уровневые объекты и т.д. Следующая иерархия показывает, как в этой структуре пред­ ставлен объект Range.