Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 2:

Начнем с объектов Office 2000

Коллекция Sheets

Коллекция Sheets представляет коллекцию листов двух типов: рабочих листов и диаграмм, - так что каждый элемент коллекции может быть объектом одного из двух классов: Worksheet или Chart. Наряду с коллекцией Sheets существуют коллекции Worksheets и Charts. Они представляют коллекции рабочих листов и диаграмм, выделенных из коллекции Sheets. Но объекты, задающие эти коллекции, принадлежат классу Sheets и используют его свойства и методы. К их рассмотрению мы и переходим.

Когда создается или открывается рабочая книга, она содержит уже некоторое число листов. Так что коллекция Sheets не пуста в момент открытия книги. Для добавления новых листов в книгу используется знакомый нам метод Add:

Add(Before,After,Count,Type)

Все параметры являются необязательными. Первые два - Before и After задают позицию вставки листа - индекс листа, перед или после которого вставляется новый лист. Из этих параметров одновременно может быть задан только один. Если оба параметра опущены, вставка производится перед активным листом данной книги. Параметр Count определяет количество вставляемых листов (по умолчанию - 1). Последний параметр определяет тип вставляемых листов, задаваемый соответствующей константой: xlWorksheet, xlChart, xlExcel4MacroSheet, xlExcel4IntlMacroSheet (по умолчанию - xlWorksheet ).

Замечание:

Рабочая книга имеет листы четырех типов. Но при вызове свойства Sheets объекта WorkBook возвращается объект класса Sheets с листами только двух типов. Чтобы получить листы других типов, нужно обратиться к другому свойству объекта WorkBook, например Excel4IntlMacroSheet, возвращающему также объект класса Sheets, но содержащий листы с так называемыми международными макросами, созданными под Excel4.

Следует обратить внимание на то, что:

  • в методе Add класса Sheets нет параметра, задающего ключ элемента. Однако фактически ключ задается. Его роль играет имя листа, заданное в виде свойства Name, имеющееся у листа каждого типа. Имя листа наряду с числовым индексом можно использовать для поиска листа в методе Item.
  • Из коллекции Sheets листы удаляются методом Delete, не имеющим параметров. В такой форме этот метод имеют многие классы объектов, в том числе Sheets, Worksheet и Chart. Если Delete вызывает объект Sheets, удаляется вся коллекция; если же его вызывают объекты Worksheet или Chart, удаляется соответствующий лист.
  • Получить доступ к элементу позволяет метод (свойство) Item:
    Item(Index)
    Параметр Index задает имя или порядковый номер листа. Метод Item является методом по умолчанию и может быть опущен.
Напомним, что иногда бывает трудно провести четкую грань, отличающую метод от свойства. Item является классическим примером подобной ситуации и потому в одной части документации он называется методом, а в другой - свойством.

Класс Sheets имеет уже известные нам свойства: Application, Creator, Parent и Count. Рассмотрим новые возможности, появившиеся у коллекции Sheets:

  • Свойство Visible - имеет значение True, если объект видимый, и False - в противном случае. Для рабочих листов и диаграмм это свойство может быть также задано константой xlVeryHidden (упрятано, да не просто, а очень уж). Если лист имеет это свойство, он становится невидимым и пользователь никак не сумеет его увидеть, пока программно это свойство не будет установлено в True. Тип свойства двоякий: Boolean или Long.
  • Свойства HPageBreak и VPageBreak - возвращают соответственно коллекции горизонтальной и вертикальной разбивки листа на страницы.
  • Метод Copy - позволяет создать новый лист книги, копируя содержимое уже имеющегося листа. Его синтаксис:
    Copy(Before, After)
    Параметры имеют привычный смысл, указывая точку вставки копируемого листа. Только один из них может быть задан при вызове метода. Метод Copy, вызванный без параметров, копирует содержимое объекта в буфер.
  • Метод Move - модификация метода Copy, позволяет передвинуть лист книги в новое положение. Его синтаксис:
    Move(Before,After)
    Параметры имеют тот же смысл, что и в методе Copy.
  • Метод Paste - копирует содержимое буфера. Параметров не имеет.
  • Метод Select - выделяет объект, его вызвавший. Методом Select обладают объекты многих классов. Если его вызывает коллекция Sheets, метод используется без параметров и выделяет все листы коллекции. Если же он вызван отдельным листом, то может иметь параметр:
    Select(Replace)
    Параметр Replace - булевого типа: если он равен True, происходит замена объекта Selection, и выделенным становится лист, вызвавший метод. Если же значение параметра - False, происходит расширение области выделения, так чтобы она включала ранее выделенный объект и новый лист.
  • Методы PrintPreview и PrintOut - позволяют осуществлять просмотр печати и печать объекта, вызвавшего метод. Как и большинство других рассматриваемых методов, они принадлежат многим классам, в том числе классам Sheets, Charts, Chart, Worksheets, Worksheet, WorkBook и др. Его синтаксис:
    PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate)
    Все параметры необязательны. Первые два задают начальную и конечную страницу печати. Если их нет, печать идет с первой по последнюю страницу. Параметр Copies, если указан, задает количество копий при печати. Если значение булевого параметра Preview - True, предварительно происходит просмотр печати, если же параметр опущен или равен False, просмотра перед печатью нет. Параметр ActivePrinter устанавливает имя активного принтера. Значение булевого параметра PrintToFile - True, если предполагается, что результаты печати посылаются не на принтер, а записываются в файл. При этом появляется диалоговое окно, в котором пользователь задает имя файла, хранящего результаты печати. Если значение параметра Collate задано True, будут сличаться результаты копий, выводимых на печать.
  • Метод FillAcrossSheets копирует содержимое области, заданной объектом Range на рабочие листы коллекции. Его синтаксис:
    FillAcrossSheets(Range, Type)
    Параметр Range указывает область копирования. Она должна принадлежать одному из листов коллекции. Этот параметр обязателен. Необязательный параметр - Type - указывает, как происходит копирование. Он может принимать значение, заданное одной из следующих констант: xlFillWithAll, xlFillWithContents или xlFillWithFormulas. Значение по умолчанию - xlFillWithAll.

В заключение приведем пример, демонстрирующий большинство методов этой коллекции.

Public Sub WorkWithSheets()
'Работа с коллекцией Sheets - листами рабочей книги
Dim N As Long, i As Byte
Dim X As Variant
'Активизация книги Book2
Workbooks("Book2").Activate
With ActiveWorkbook.Sheets
    N = .Count
    Debug.Print "Число листов при первоначальном открытии" _
        & "книги = ", N
    Debug.Print "Имена листов:"
    For i = 1 To .Count
       Debug.Print .Item(i).Name
    Next
    ' Переименование листов
    .Item(1).Name = "Two"
    .Item(2).Name = "Four"
    .Item(3).Name = "Six"
    'Добавление листов One, Three, Five
    .Add Before:=.Item("Two")
    .Add After:=.Item("Two"), Type:=xlChart
    .Add After:=.Item("Four"), Type:=xlExcel4MacroSheet
    .Item(1).Name = "One"
    .Item(3).Name = "Three"
    .Item(5).Name = "Five"
     N = .Count
     Debug.Print "Число листов книги после вставки" _
            & "3-х листов =", N
     Debug.Print "Имена и типы листов после переименования:"
     For i = 1 To .Count
         Debug.Print .Item(i).Name, .Item(i).Type
     Next
     'Удаление 3-го и 5-го листов
     .Item("Three").Delete
     .Item("Five").Delete
     'Работа с первым листом
     .Item("One").Activate
    'Запуск макроса Fibonachi, заполняющего область листа A1:A20
    'последовательностью чисел Фибоначчи
     Fibonachi
    'Копирование первого листа на вновь создаваемый третий лист
     .Item("One").Copy After:=.Item("Two")
     'Переименование и перемещение листа
     ActiveSheet.Name = "Seven"
     .Item("Seven").Move After:=.Item("Six")
    'Копирование области одного листа на последовательность листов
    X = Array("One", "Four", "Six")
    Sheets(X).FillAcrossSheets Range:=Worksheets("One").Range("A1:A20")
    Debug.Print "Имена,типы листов и содержимое двадцатой ячейки:"
    For i = 1 To .Count
        Debug.Print .Item(i).Name, .Item(i).Type, _
            .Item(i).Range("A20").Value
    Next
End With
End Sub
1.4.

Работая с тестовым документом - книгой BookOne. Мы последовательно щелкали командные кнопки, запускающие процедуры WorkWithBooks и WorkWithSheets. Вот результаты отладочной печати при работе последней процедуры:

Число листов при первоначальном открытии книги = 3 
Имена листов:
Sheet1
Sheet2
Sheet3
Число листов книги после вставки 3-х листов = 6 
Имена и типы листов после переименования:
One           -4167 
Two           -4167 
Three          3 
Four          -4167 
Five            3 
Six            -4167 
Имена, типы листов и содержимое двадцатой ячейки:
One          -4167          6765 
Two          -4167         
Four          -4167          6765 
Six            -4167          6765 
Seven       -4167          6765

Кратко прокомментируем работу программы. Вначале активизируется книга с именем Book2 из коллекции книг, созданных предыдущим макросом. Эта книга содержит три листа со стандартными именами: Sheet1 -Sheet3. Мы добавляем в эту книгу еще три листа разных типов и переименовываем все листы, давая им имена от One до Six. Четыре листа книги являются рабочими листами и имеют тип xlWorksheet (значение константы -4167 ). Третий лист - это лист диаграммы типа xlChart, а пятый является листом макросов и имеет тип xlExcel4MacroSheet.

Замечание:

В Office 97 и Бета версии Office 2000 тип листа диаграммы (свойство Type ) устанавливался неверно. Вместо правильного значения, равного -4109, устанавливалось значение 3, что соответствует листу макроса. В процессе тестирования Office 2000 мы сообщили об этой ошибке и надеемся, что в заключительной версии она уже исправлена.

Затем третий и пятый лист удаляются, и в книге остаются только рабочие листы. Следующие шаги программы демонстрируют работу методов Copy и Move. Вначале активизируется первый лист, вызывается макрос Fibonachi, заполняющий последовательностью чисел Фибоначчи область листа - ячейки A1:A20. Затем создается копия этого листа, и вновь созданный лист - One(2) - помещается после второго листа книги. Он переименовывается, получает имя Seven и перемещается, заняв позицию после листа Six. Метод FillAcrossSheet позволяет скопировать область одного листа в соответствующие области нескольких листов той же книги. Для этого вначале создается массив X с именами листов, в которые будут копироваться данные. Обратите внимание на этот важный, часто используемый метод. Заметьте: в список массива X должен быть включен и лист One, с которого будет производиться копирование.

полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.