Смекни!
smekni.com

Организация документооборота с помощью "Visual Basic for Application" (стр. 7 из 22)

объект.Cells(номер_строки, номер_столбпа);

объект. Cells (номер_строки);

объект. Cells.

Проиллюстрируем на примерах особенности применения свойства Cells. Вначале в ячейку Al листа Лист1 введем значение 9. В данном случае используется первый синтаксис, где аргументами являются номер строки (от 1 до 65536) и номер столбца (от 1 до 256):

Worksheets("Лист1").Cells(1, 1) = 9

Ниже приведен пример, в котором значение 7 вводится в ячейку D3 (т.е. пересечение

строки 3, столбца 4) активного рабочего листа:

ActiveSheet.Cells(3, 4) = 7

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

ActiveCell.Cells(1,1) = 5

Это удобно, когда речь пойдет о переменных и циклах . В большинстве

случаев в аргументах не будет использоваться фактическое значение. Вместо него используется переменная.

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

ActiveCell.Cells(2, 1) = 5

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

Этот синтаксис можно использовать и с объектом Range. В таком случае будет получена ячейка по отношению к указанному объекту Range. Например, если объект Range — это диапазон Al: D10 (40 ячеек), то свойство Cells может иметь аргумент от I до 40 и возвращать одну из ячеек объекта Range. В следующем примере значение 2000 вводится в ячейку А2, так как А2 является пятой ячейкой (считая сверху направо, затем вниз) в указанном диапазоне:

Range("Al:D10").Cells(5) = 2000

В предыдущем примере аргумент свойства Cells не ограничен значениями между 1 и 40. Если аргумент превышает количество ячеек в диапазоне, счет продолжается, будто диапазон больше, чем он есть на самом деле, Следовательно, оператор, подобный предыдущему, может изменить значение ячейки, которая находится за пределами указанного диапазона A l : D10.

Третий синтаксис свойства Cells возвращает все ячейки на указанном рабочем листе.

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

ActiveSheet.Cells.ClearContents


Свойство Offset

Свойство Offset (подобно свойствам Range и Cells) также возвращает объект Range.

В отличие от рассмотренных выше свойств, Offset применяется только к объекту Range и ни к какому другому. Данное свойство использует единственный синтаксис:

объект.Offset(сдвиг_строки, сдвиг_столбца)

Два аргумента свойства Offset соответствуют смешению относительно левой верхней ячейки указанного диапазона Range. Эти аргументы могут быть положительными (сдвиг вниз или вправо), отрицательными (вверх или влево) или нулевыми. В приведенном ниже примере значение 12 вводится в ячейку, которая находится под активной ячейкой:

ActiveCell.Offset(l,0).Value = 12

В следующем примере значение 15 вводится в ячейку над активной ячейкой:

ActiveCell.Offset(-l,0).Value = 15

Если активная ячейка находится в строке 1, то свойство Ofset в предыдущем примере выдает ошибку, так как оно не возвращает несуществующий объект Range.

Свойство Offset особо эффективно при использовании переменных в цикле.

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

введем значение в ячейки В1: ВЗ, а затем вновь вернемся к ячейке В1:

Sub Macrol()

ActiveCell.FormulaRlCl = "1"

ActiveCell.Offset(1, 0) .Range ("Al") .Select

ActiveCell.FormulaRlCl = "2"

ActiveCell.Offset(1, 0} .Range ("Al") .Select

ActiveCell.FormulaRlCl = "3"

ActiveCell.Offset(-2, 0).Range("Al").Select

End Sub

При записи макросов используется свойство FormulaRlCl. Как правило, для ввода значения в ячейку применяется свойство Value. Однако при использовании FormulaRlCl или Formula результат будет таким же.

Также обратите внимание, что полученный код ссылается на ячейку Al, что довольно

странно, так как эта ячейка даже не была задействована в макросе. Данная особенность процедуры записи макросов делает программу даже более сложной, чем необходимо. Вы можете удалить все ссылки на Range ( "А1" ), и макрос все равно будет работать нормально:

Sub Modified Macro1( )

ActiveCell.FormulaRlCl = "1"

ActiveCell.Offset(1, 0) .Select

ActiveCell.FormulaRlCl = "2"

A c t i v e C e l l . O f f s e t (1 , 0 ) . S e l e c t

ActiveCell.FormulaRlCl = "3"

A c t i v e C e l l . O £ f s e t ( - 2 , 0 ) . S e l e c t

End Sub

Вы можете получить еще более эффективную версию макроса (например ту, которую я

написал вручную), где вообще не выполняется выделение:

Sub Macrol ()

ActiveCell = 1

ActiveCell.Offset(1. 0) = 2

ActiveCell.Offset(-2, 0) = 3

End Sub

Используйте запись действий

Несомненно, лучший способ познакомиться с VBA— включить функцию записи макросов и записать отдельные действия, выполненные в Excel. Это быстрый метод узнать, какие объекты, свойства и методы относятся к конкретной задаче. Будет лучше, если при записи отображается окно модуля VBA, в котором представлен записываемый код.

Используйте электронную справочную систему

Основной источник подробной информации об объектах, методах и процедурах Excel — это электронная справочная система.

Используйте броузер объектов

Окно Object Browser (Броузер объектов)— это удобный инструмент, предоставляющий список всех свойств и методов для всех доступных объектов. В VBE окно Object Browser можно отобразить одним из трех способов.

• Нажать <F2>.

• Выбрать в строке меню команду View - Object Browser.

• Щелкнуть на кнопке Object Browser на стандартной панели инструментов.

Броузер объектов — полный справочный ресурс

Выпадающий список в левом верхнем углу окна Object Browser содержит список всех библиотек объектов, к которым у вас есть доступ,

• Собственно Excel.

• MSForms (используется для создания специальных диалоговых окон).

• Office (объекты, общие для всех приложений Microsoft Office).

• S t d o l e (объекты автоматизации OLE).

• VBA.

• Все открытые рабочие книги (каждая книга считается библиотекой объектов, так как содержит объекты).

Ваш выбор в этом списке определяет, что отображается в окне Classes (Классы), а выбор в окне Classes обусловит появление определенных компонентов в окне Members of (Включены в).

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

Предположим, что выработаете над проектом, обрабатывающим примечания в ячейках. 1. Выберите интересующую вас библиотеку. Если вы не уверены, какую именно библиотеку выбрать, укажите вариант <All Libraries>.

2. Введите Comment в выпадающем списке под списком библиотек.

3. Щелкните на значке в виде бинокля, чтобы начать поиск текста.

В окне Search Results (Результаты поиска) отображается текст, соответствующий фрагменту для поиска. Выберите один объект, чтобы отобразить его классы в окне Classes. Укажите класс, чтобы отобразить его члены (свойства, методы и константы). Обратите внимание на нижнюю часть окна, где дается дополнительная информация об объекте. Вы можете нажать <F1>, чтобы перейти непосредственно к необходимому разделу справочной системы.

Система Object Browser может сначала показаться сложной, но, изучив ее вы убедитесь в ее незаменимости.


Экспериментируйте с окном Immediate

Как было отмечено во врезке в одном из предыдущих разделов этой главы, окно Immediate в VBE используется для тестирования операторов и проверки разных выражений

VBA. Рекомендуется отображать окно Immediate, так как оно часто используется для про-

верки выражений и при отладке кода.

1.2.2 Примеры на использование VBA в среде Excel

Объектная модель

Объектная модель MS Excel представляет собой иерархию объектов, под­чиненных одному объекту Application, который соответствует самому приложению Excel. Многие из этих объектов собраны в библиотеке объек­тов Excel, но некоторые из них, например, объект Assistant, входят в библиотеку объектов Office, которая является общей для всех офисных приложений.

Объект Application

Объект Application — это главный (корневой) объект в иерархии объектов MS Excel, представляющий само приложение MS Excel. Он имеет огромное число свойств и методов, которые позволяют установить общие параметры приложения MS Excel.

Свойства объекта Application

Объект Application, благодаря обширной коллекции свойств, позволяет программно установить значения многих опций окна Параметры, отображаемого при выборе команды Сервис - Параметры. Кроме того, он обеспечивает доступ к объектам верхнего уровня типа ActiveCell, ActiveSheet и т.д. Перечислим основные свойства этого объекта:

ActiveCell ActiveChart

AcfcivePrinter ActiveSheet

ActiveWorkBook AddIns

CellDragAndDrop Charts

Cursor DefaultFilePath

DefaultWebOptions DisplayAlerts

DisplayFormulaBar DisplayScrollBars

EditDirectlylnCell FileSearch

Height LibraryPath

MemoryTotal Names

Organ i zat ionName ProductCode

Referencestyle Selection

StatusBar Top

UsableWidth Version

Windows WorksheetFunction

Семейство встроенных диалоговых окон

Свойство Dialogs возвращает семейство всех встроенных диалоговых окон. Параметр этого семейства идентифицирует ОКНО, метод Show отобража­ет его на экране, а параметры этого метода задают параметры, специфицируемые в отображаемом окне. Метод show возвращает значение True, если задача, поставленная в отображаемом окне, была выполнена успешно. Например, следующий код (листинг 2) отображает окно Открытие документа для от­крытия книги C:&bsol;test.xls.