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

202 Часть III. Visual Basic for Applications

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

MsgBox ActiveWindow.RangeSelection.Count

Работа с объектами Range

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

Объект Range содержится в объекте Worksheet и состоит из одной ячейки или диапазона ячеек на отдельном рабочем листе. В следующих разделах будут рассмотрены три способа задания ссылки на объекты Range в программе VBA:

свойство Range объекта класса Worksheet или Range;

свойство Cells объекта Worksheet;

свойство Offset объекта Range.

Свойство Range

Свойство Range возвращает объект Range. Из справочных сведений о свойстве Range вы узнаете, что к нему можно обратиться с помощью нескольких вариантов син­

таксиса.

щ

об ъ е к т .Range(я ч е й к а 1)

об ъ е к т .Range(я ч е й к а 1 , я ч е й к а 2 )

Работа с объединенными ячейками

Работа с объединенными ячейками может вызывать затруднения. Если диапазон содержит такие ячейки, придется выполнять некоторые специальные действия с помо­ щью макроса. Например, если ячейки A1.D1 объединены, показанный ниже оператор выделит все столбцы от А до D (а не только столбец В, как можно ошибочно полагать).

C olum ns( "В : В ") .S e le c t

Возможно, подобное поведение является намеренным либо результатом какойлибо ошибки. В любом случае оно может вызвать непредвиденные реакции макроса. Объединенные ячейки также приводят к появлению проблем в процессе сортировки.

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

вдиапазоне содержится хотя бы одна объединенная ячейка (дополнительные сведения

опроцедурах-функциях можно найти в главе 10).

F u n c tio n

C o n ta in s M e rg e d C e lls (rn g As Range)

im

c e ll As Range

 

o n ta in s M e rg e d C e lls =

F alse

For

Each c e ll In rn g

 

 

I f

c e ll.M e rg e C e lls

Then

 

 

C on ta in sM erge dC e lls = True

 

 

E x it F u n c tio n

 

 

End

I f

 

R ange.

Глава 7. Введение в VBA

203

N e x t c e l l

End F u n c t i o n

Для создания ссылки на объединенные ячейки можно сослаться на весь диапазон объединенных ячеек либо на верхнюю левую ячейку в объединенном диапазоне. Напри­ мер, если рабочий лист включает четыре ячейки, объединенные в одну (А1, В1, А2 и В1), сослаться на объединенные ячейки можно с помощью одного из следующих выражений.

Range ( " А 1 : В 2 " )

Range ( " A l ")

Если попытаться присвоить значение ячейке в объединенном диапазоне, причем эта ячейка не является верхней левой, VBA игнорирует эту инструкцию и даже не генериру­ ет сообщение об ошибке. Например, следующий оператор бесполезен, если ячейки А1:В2 объединены:

Range ( " В 2 " ) . V a l u e = 43

Некоторые операции приводят к тому, что Excel отображает подтверждающее со­ общение. Например, если ячейки А1:В2 объединены, следующий оператор генерирует сообщение T h i s o p e r a t i o n w i l l c a u s e some m e rg e d c e l l s t o u n m e rg e . Do you w is h t o c o n t i n u e ? (Эта операция может привести к отмене статуса некоторых объединенных ячеек. Продолжать?).

Range( " В 2 " ) . D e l e t e

Мораль? Будьте осторожны при работе с объединенными ячейками. Перед приме­ нением этого свойства хорошо подумайте.

Свойство R an ge относится к одному из двух типов объектов: W o r k sh e e t или Range. В данном случае я ч ей к а1 и я ч ей к а2 указывают параметры, которые Excel будет воспринимать как идентифицирующие диапазон (в первом случае) или очерчи­ вающие диапазон (во втором случае). Ниже следует несколько примеров использования метода

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

W o rksh eets ( "Л и с т 1 " ) .R a n g e ( " A l " ) . V a l u e = 1 2 . 3

Свойство R ange также поддерживает имена, определенные в рабочих книгах. По­ этому, если ячейка называется Ввод, то для ввода значения в нее может использоваться следующий оператор:

W o rksh eets ( " Л и с т 1 " ) .R a n g e ( " В в о д " ) . V a l u e = 100

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

A c t i v e S h e e t . R a n g e ( " A l : B l 0 ") . V a l u e = 2

Приведенный ниже пример приведет к тому же результату, что и предыдущий.

Range( " A l ", " B I O " ) = 2

Отличие заключается лишь в том, что опущена ссылка на лист, поэтому предполага­ ется активный рабочий лист. Кроме того, пропущено свойство, поэтому используется свойство по умолчанию (для объекта R an ge это свойство V a lu e ). В приведенном при­ мере используется второй синтаксис ссылки на свойство R ange. В данном случае пер­

204

Часть III. Visual Basic for Applications

вый аргумент — это левая верхняя ячейка диапазона, а второй — ячейка в правом ниж­ нем углу диапазона.

В следующем примере для получения пересечения двух диапазонов применяется опе­ ратор пересечения Excel (пробел). Пересечением является одна ячейка — Сб. Следова­ тельно, данный оператор вводит значение 3 в ячейку Сб.

R a n g e ( " C l : С Ю А 6 : Е 6 " ) = 3

Наконец, в следующем примере значение 4 вводится в пять ячеек, т.е. в независимые диапазоны. Запятая выполняет роль оператора объединения.

R a n g e ( " A l , А З , А 5 , А 7 , А 9 ") = 4

До настоящего момента во всех рассмотренных примерах использовалось свойство Range объекта W orksheet. Вы также можете использовать свойство Range объекта Range. Сначала будет непросто, однако постарайтесь разобраться.

Ниже показан пример использования свойства Range объекта Range (в данном слу­ чае объектом Range является активная ячейка). В этом примере объект Range рассмат­ ривается как левая верхняя ячейка на рабочем листе. В ячейку, которая в таком случае была бы В2, вводится значение 5. Другими словами, полученная ссылка является отно­ сительной для верхнего левого угла объекта Range. Таким образом, следующий опера­ тор вводит значение 5 в ячейку, расположенную справа внизу от активной ячейки.

A ctiv eC ell.Range( " В 2 ") = 5

Существует также намного более понятный способ обратиться к ячейке по отноше­ нию к диапазону — использовать свойство O f f s e t (рассмотрено далее).

Свойство C ells

Другим способом сослаться на диапазон является применение свойства C e lls . По­ добно Range, свойство C e lls может использоваться в объектах W orksheet и Range. Справочная система указывает на три варианта синтаксиса свойства C e lls .

о б ъ е к т . C e l l s (н о м ер _ ст р о к и , н ом ер_ст олбца)

об ъ ек т . C e l l s (н ом ер _ ст рок и )

об ъ ек т . C e l l s

Проиллюстрируем на примерах особенности применения свойства C e lls . Вначале в ячейку А1 листа Лист1 введите значение 9. В данном случае используется первый синтаксис, в котором аргументами являются номер строки (от 1 до 1048576) и номер столбца (от 1 до 16384).

W o r k s h e e t s ( " Л и с т " ) . C e l l s (1, 1) = 9

Ниже приведен пример, в котором значение 7 вводится в ячейку D3 (т.е. пересечение строки 3 и столбца 4) активного рабочего листа.

A c t i v e S h e e t . C e l l s (3, 4) = 7

Можно также использовать свойство C e lls объекта Range. При этом объект Range, который возвращается свойством C e lls , задается относительно левой верхней ячейки диапазона Range, на который мы ссылаемся. Сложно? Может быть. Приведем пример. Следующая инструкция вводит значение 5 в активную ячейку. Помните, что в данном случае активная ячейка рассматривается как ячейка А1 на рабочем листе.

A c t i v e C e l l . C e l l s (1, 1) = 5

o c a l
F o r m u l a A r r a y .

Глава 7. Введение в VBA

205

Примечание

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

Чтобы ввести значение 5 в ячейку, которая находится под активной, обратитесь к та­ кой инструкции:

A c t i v e C e l l . C e l l s (2, 1) = 5

Предыдущий пример можно описать так: необходимо начать с активной ячейки, рас­ сматривая ее как ячейку А1. Затем обратитесь к ячейке во второй строке и первом столб­ це диапазона.

Еще один синтаксис свойства C e lls использует один аргумент, который задается вдиапазоне от 1 до 17179869184. Второе число равно количеству ячеек на рабочем листе Excel 2010. Ячейки нумеруются, начиная с А1 вправо, затем вниз и вправо вдоль сле­ дующей строки. Ячейка 16384 — это XFD1, а 16385 — А2.

Далее в ячейку SZ1 активного листа (ячейку 520 на рабочем листе) введем значение 2.

A c t i v e S h e e t . C e l l s (520) = 2

Для отображения значения последней ячейки рабочего листа (XFD1048576) восполь­ зуйтесь следующим оператором:

MsgBox A c t i v e S h e e t . C e l l s (1 7 1 7 9 8 6 9 1 8 4 )

Этот синтаксис можно использовать и с объектом R ange. В таком случае будет по­ лучена ячейка по отношению к указанному объекту R ange. Например, если объект Range — это диапазон A1:D10 (40 ячеек), то свойство C e l l s может иметь аргумент от 1 до 40 и возвращать одну из ячеек объекта R ange. В следующем примере значение 2000 вводится в ячейку А2, так как А2 является пятой ячейкой (считая сверху направо и вниз) в указанном диапазоне.

Range (" A 1 :D 1 0 " ) . C e l l s (5) = 2000

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

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

• Свойство F o r m u la возвращает формулу в случае, когда она находится в ячейке. Если ячейка не содержит формулу, возвращается находящееся в ней значение. Свойство F o r m u la может как считываться, так и изменяться пользователем, а так­ же выражаться несколькими вариантами, среди которых F o r m u l a R l C l , F o r m u l a L - и (Дополнительные сведения по этом теме можно найти

в справочной системе.)

Свойство v a l u e возвращает исходное неотформатированное значение ячейки. Это свойство может считываться и изменяться пользователем.

Свойство T e x t возвращает текст, отображаемый в ячейке. Если ячейка содержит числовое значение, это свойство включает все имеющееся форматирование, включая запятые и денежные символы. Свойство T e x t предназначено только для чтения.

• Свойство V a l u e 2 подобно свойству V a l u e , но не использует типы данных D a t e и C u r r e n c y . Свойство V a l u e 2 преобразует типы данных D a t e и C u r r e n c y в тип