Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1888.DOC
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
5.52 Mб
Скачать

6.3. Примеры макросов

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

Программирование на VBA можно рассматривать, как управление объектами приложения. Именно объектами и управляет это приложение. Если упростить иерархическую структуру, то это выглядит следующим образом:

Application

Workbooks

Worksheets

Cells

Другими словами, главный объект – приложение (Application). В приложении может быть несколько книг (Workbooks), внутри которых находятся листы (Worksheets или Sheets). Листы разбиты на ячейки (Cells). При работе активными могут быть только одна книга и один лист. Рассмотрим макрос, который определяет количество листов в текущей книге:

Sub Test()

Dim book, sheet, addr, s As String

Dim xList As Integer

addr = "C"

book = Application.ActiveWorkbook.Name

sheet = Application.ActiveSheet.Name

Workbooks(book).Activate

Worksheets(sheet).Activate

Range("A1") = book

Range("B1") = sheet

xList = Application.Sheets.Count

For x = 1 To xList

s = addr + LTrim(Str(x))

Range(s) = x

Next x

End Sub

Используя объект Application, получим имена текущих книг и листа. С помощью Range ("...") можно сослаться на ячейку. Объекты имеют огромное количество свойств и методов. Задача программиста на VBA – использовать эти свойства и методы.

При написании программы часто приходится работать с группами однотипных объектов. Для этого используются массивы или коллекции. При этом именно понятие «коллекция» в VBA получила широкое распространение. Обратиться к объекту коллекции можно, указав его номер или имя (строку) в круглых скобках после имени коллекции.

6.3.2. Коллекция Workbooks

В Excel на верхнем уровне иерархии объектов находится объект Application. Он содержит ряд коллекций. Первая коллекция – это коллекция рабочих книг Workbooks.

Рассмотрим пример, позволяющий узнать, сколько книг открыто:

Sub Test()

MsgBox(Str(Application.Workbooks.Count))

End Sub

Функция Str переводит число в строку. Метод Count возвращает количество элементов коллекций. Метод Open позволяет открыть книгу. Единственный обязательный аргумент – это имя файла, остальные можно опустить:

Sub Test()

Application.Workbooks.Open("D:\Stud\My.xls")

End Sub

Метод закрытия рабочей книги (т. е. удаления книги из коллекции) называется Close:

Sub Test()

Application.Workbooks(1).Close

' или Application.Workbooks("My.xls").Close

End Sub

Как видим, доступ можно получить по индексации и по имени книги. Следует знать, что имя книги – это имя файла, в котором он хранится. В таком варианте закроются все книги:

Sub Test()

Application.Workbooks.Close

End Sub

Метод Close имеет необязательный аргумент типа Boolean. Если его установить в True, сделанные изменения сохранятся, в противном случае – нет. Если параметр опускается, как в примерах, приведенных выше, то при закрытии появляется диалоговое окно с вопросом о необходимости сохранения.

При работе с коллекциями часто используется цикл For Each. Он позволяет произвести однотипные операции над всеми объектами:

For Each переменная In коллекция

Инструкции

Next переменная

Переменная должна иметь тип, совпадающий с объектами коллекции, или Variant, в котором можно хранить практически все. Ниже приведен пример использования типа Variant:

Sub Test()

Dim arrays(1) As String

Dim vari As Variant

arrays(0) = "Hello"

arrays(1) = "Each :-)"

For Each vari In arrays

MsgBox (vari + " - Steps")

Next vari

End Sub

Нижеследующий пример иллюстрирует, как быстро просмотреть открытые книги:

Sub Test()

Dim vars As Variant

For Each vars In Workbooks

MsgBox (vars.Name)

Next vars

End Sub

Или листы книги:

Sub Test()

Dim vars As Variant

For Each vars In Workbooks("Test.xls").Sheets

MsgBox (vars.Name)

Next vars

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]