Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
объектная модель Excel.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Установка и снятие защиты книги

Защита на рабочую книгу от внесения в нее изменений устанавливается методом Protect, а снимается — методом Unprotect.

Protect(Password, Structure, Windows) Здесь:

  • Password — необязательный параметр, задающий пароль для защиты книги. Если параметр опущен, то книга защищена без пароля;

  • Structure — необязательный параметр, устанавливающий, защищена ли структура книги, т. е. взаимное расположение листов;

  • Windows — необязательный параметр, определяющий защищены ли окна книги.

Защита с рабочей книги снимается методом Unprotect.

Unprotect(Password)

Здесь Password — необязательный параметр, указывающий пароль защиты.

В приводимом ниже коде из модуля рабочего листа обрабатывается событие BeforeRightciick объекта Worksheet (листинг 5.25). При щелчке правой кнопкой мыши на ячейке А1 устанавливается защита структуры и окон рабочей книги. Щелчок же правой кнопкой мыши на ячейке В1 снимает эту защиту.

Листинг 5.25. Установка и снятие защиты. Модуль рабочего листа

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _

Cancel As Boolean)

If Target.Address = "$A$1" Then

Cancel = True

ThisWorkbook.Protect Password:="wow", Structure:=True, _

Windows:=True

End If

If Target.Address = "$B$1" Then

Cancel = True

ThisWorkbook.Unprotect Password:="wow"

End If

End Sub

Сохранение рабочей книги с именем, соответствующим текущей дате

Метод SaveAs объекта Workbook производит сохранение рабочей книги. Если необходимо, чтобы книга сохранилась так, чтобы ее именем была текущая дата, то можно воспользоваться кодом из листинга 5.26.

Листинг 5.26. Сохранение рабочей книги с именем, соответствующим текущей дате

Sub SaveAsTodaysDate()

Dim FileName As String, Path As String

Path = "C:\"

FileName » Format(Now(), "mmddyy")

ActiveWorkbook.SaveAs Path & FileName

End Sub

События объекта Workbook

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

Таблица 5.6. События объекта Workbook

Событие

Генерируется

Activate

При активизации рабочей книги

Addinlnstall

Когда рабочая книга инсталлируется как надстройка

AddinUninstall

Когда рабочая книга удаляется как инсталлированная надстройка

BeforeClose

Перед закрытием рабочей книги

BeforePrint

Перед печатью

BeforeSave

Перед сохранением рабочей книги

Таблица 5.6. События объекта Workbook(Продолжение)

Deactivate

При потере фокуса рабочей книгой

NewSheet

При создании нового листа

Open

При открытии рабочей книги

PivotTableCloseConnection

При закрытии связи сводной таблицы с источником данных

PivotTableOpenConnection

При установке связи сводной таблицы с источником данных

SheetActivate

При активизации любого рабочего листа

SheetBeforeDoubleClick

При двойном щелчке, но перед выполнением действий, назначенных по умолчанию двойному щелчку

SheetBeforeRightClick

При щелчке правой кнопкой мыши, но перед выполнением действий, назначенных по умолчанию этому щелчку

SheetCalculate

После завершения всех вычислений во всех рабочих листах и перерисовки диаграмм

SheetChange

При изменении значения на любом листе в какой-либо ячейке

SheetDeactivate

При потере листом фокуса

SheetFollowHyperlink

При щелчке на гиперссылке

SheetPivotTableUpdate

После обновления сводной таблицы

SheetSelectionChange

При изменении выделения на любом листе

WindowActivate

При активизации окна

WindowDeactivate

При деактивизации окна

WindowResize

При изменении размеров окна

Запрет закрытия рабочей книги

У процедуры обработки события BeforeClose объекта Workbook, генерируемого перед закрытием рабочей книги, имеется параметр Cancel. При значении True он блокирует закрытие книги. При значении False — закрытие разрешено. Например, следующий код (листинг 5.27) из модуля ЭтаКнига разрешает пользователю закрыть книгу только в случае, если в ячейку А1 введена строка "Go".

Листинг 5.27. Запрет закрытия рабочей книги. Модуль ЭтаКнига

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Range("A1").Value = "Go" Then

Cancel = False

Else

Cancel = True

End If

End Sub

Автоматическое изменение размеров столбцов при проведении вычислений

Для автоматического изменение размеров столбцов при проведении вычислений необходимо обработать метод AutoFit объекта Range при перехвате события Calculate объекта Worksheet, которое и генерируется, когда на рабочем листе производятся вычисления (листинг 5.28).

Листинг 5.28. Автоматическое изменение размеров столбцов.

Модуль рабочего листа

Private Sub Worksheet_Calculate()

Columns("A:F").AutoFit

End Sub

Как отследить за тем, кто открывал рабочую книгу?

Для того чтобы отследить, кто открывал рабочую книгу, достаточно воспользоваться процедурой обработки события Open, при реализации которого осуществляется ввод информации о текущем пользователе во вспомогательный текстовый файл, например, как это делается в коде листинга 5.29. Данные о пользователе получаются с помощью свойства UserName объекта Application.

Private Sub Workbook_Open()

Open ThisWorkbook.Path & "\info.log" For Append As #1

Print #1, Application.UserName, Now

Close #1

End Sub

Семейство Worksheets

Семейство Worksheets инкапсулирует в себе все рабочие листы рабочей книги. Основные свойства этого семейства возвращают число элементов и конкретный элемент семейства. Методы же семейства Worksheets предоставляют более широкий ассортимент операций, начиная созданием нового листа и заканчивая его удалением. Свойства и методы семейства Worksheets перечислены в табл. 5.7 и 5.8.

Таблица 5.7. Свойства семейства Worksheets

Свойство

Описание

Count

Возвращает число элементов семейства

Item

Возвращает элемент семейства

Таблица 5.8. Методы семейства Worksheets

Метод

Описание

Add

Создает новый лист.

Add (Before, After, Count, Type)

Здесь:

  • Before — необязательный параметр, специфицирующий лист, перед которым будет добавлен новый;

  • After — необязательный параметр, специфицирующий лист, после которого будет добавлен новый;

  • Count — необязательный параметр, указывающий число добавляемых листов. По умолчанию его значение равно единице;

  • Туре — необязательный параметр, задающий тип листа. Его допустимым значением может быть одна из следующих постоянных XlSheetType: xlWorksheet, xlChart, xlExcel4MacroSheet и xlExcel4IntlMacroSheet. По умолчанию подразумевается значение xlWorksheet

Copy

Копирует лист.

Copy (Before, After)

Здесь:

  • Before — необязательный параметр, специфицирующий лист, перед которым будет вставлен данный;

  • After— необязательный параметр, специфицирующий лист, после которого будет вставлен данный

Delete

Удаляет лист

Move

Перемещает лист.

Move (Before, After)

Здесь:

  • Before — необязательный параметр, специфицирующий лист, перед которым будет вставлен данный;

  • After — необязательный параметр, специфицирующий лист, после которого будет вставлен данный

Printout

Печать листа или группы листов.

Printout (From, To, Copies, Preview, ActivePrinter, PrintToFile, _

Collate, PrToFileName)

Здесь:

  • From — необязательный параметр, определяющий номер листа, с которого начинается печать группы специфицированных рабочих листов;

  • То — необязательный параметр, специфицирующий номер последнего листа из группы печатаемых листов;

Таблица 5.8. Методы семейства Worksheets(Продолжение)

Метод

Описание

  • Copies - необязательный параметр, задающий число печатаемых копий;

  • Preview - необязательный параметр, причем, если его значение равно True, то перед осуществлением печати MS Excel отображает окно предварительного просмотра, а если False — то печать происходит непосредственно без отображения этого окна;

  • ActivePrinter - необязательный параметр, задающий имя активного принтера;

  • PrintToFile - необязательный параметр, причем, если его значение равно True, то печать производится в файл;

  • Collate - необязательный параметр, причем, если его значение равно True, MS Excel разбирает документ по печатаемым копиям;

  • PrToFileName - необязательный параметр, указывающий имя выходного файла, если значение параметра PrintToFile установлено равным True

PrintPreview

Отображает окно предварительного просмотра

Select

Выбирает специфицированный лист

FillAcrossSheets

Копирует указанный диапазон в другие рабочие листы данной коллекции.

FillAcrossSheets(Range, Type)

Здесь:

  • Range — обязательный параметр, дающий ссылку на копируемый диапазон;

  • Туре — необязательный параметр, специфицирующий, как диапазон будет копироваться. Допустимые значения определяются постоянными XlFillWith: xlFillWithAll, xlFillWithContents и xlFillWithFormats

Вставка нового листа с именем,

отличным от существующих

В качестве примера работы с методами Add и Move приведем текст процедуры, которая в книгу добавляет новый рабочий лист, причем первоначально

проверяет, существует ли уже лист со специфицированным именем (листинг 5.30). Если такой лист имеется или пользователь забыл специфицировать имя добавляемого листа, то об этом отображается сообщение и процедура завершает работу.

Sub AddNewSheet(newSheetName As String)

Dim ws As Worksheet

ForEach ws In Worksheets

If ws.name = newSheetName Or newSheetName = "" Then

MsgBox "Такой лист уже существует", vblnformation

Exit Sub

End If

Next

Sheets.Add Type:="Worksheet"

With ActiveSheet

.Move After=Worksheets(Worksheets.Count)

.Name = newSheetName

End With

End Sub

Объект Worksheet

В иерархии MS Excel объект Worksheet идет сразу после объекта Workbook и представляет собой рабочий лист. Объект Worksheet возвращается либо как элемент семейства Worksheets, либо как элемент семейства Sheets одноименным свойством объекта Workbook, либо как активный рабочий лист — свойством ActiveSheet.

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

Объект Worksheet обладает огромной коллекцией свойств, предоставляющих разработчику обширные средства от получения доступа к конкретной ячейке до сложной обработки данных типа "фильтрация". В табл. 5.9 перечислены свойства этого объекта.

Таблица 5.9. Свойства объекта Worksheet

Свойство

Описание

AutoFilter

Возвращает объект AutoFilter, инкапсулирующий в себе данные об используемом автофильтре для обработки данных, и значение Nothing, если фильтр не применяется

AutoFilterMode

Возвращает значение True, если в ячейках отображаются раскрывающиеся списки автофильтра

Cells

Возвращает либо одну ячейку, либо семейство ячеек

CircularReference

Возвращает ссылку на диапазон, содержащий циклическую ссылку

Columns

Возвращает либо один столбец, либо семейство столбцов

Comments

Возвращает семейство Comments всех примечаний

ConsolidationFunction

Возвращает код функции консолидации данных, ис­пользуемой при построении итоговой таблицы

ConsolidationOptions

Возвращает трехмерный массив, содержащий в себе данные о конструируемой итоговой таблице

ConsolidationSources

Возвращает трехмерный массив, содержащий в себе информацию о расположении консолидируемых данных

DisplayPageBreaks

Управляет отображением линий разрыва страницы

EnableAutoFilter

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

EnableCalculation

Если значение этого свойства равно False, то не происходит пересчета формул на рабочем листе, если же его значение равно True, то пересчет производится автоматически

EnableOutlining

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

EnablePivotTable

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

EnableSelection

Определяет, какие ячейки могут быть выбраны на рабочем листе, если на нем установлена защита. Допустимыми значениями являются следующие постоянные XlEnableSelection: xlNoSelection (выбор запрещен), xlNoRestrictions (выбирать можно все ячейки), xlUnlockedCells (выбирать можно только те ячейки, у которых значение свойства Locked установлено равным False)

FilterMode

Это свойство отбражает значение True, если на рабочем листе имеются списки, к которым были применены фильтры, в результате чего некоторые их элементы оказались скрытыми

HPageBreaks

Возвращает семейство HpageBreaks, состоящее из объектов HPageBreak, инкапсулирующих в себе информацию о горизонтальных разрывах страницы

Hyperlinks

Возвращает семейство Hyperlinks, состоящее из объектов Hyperlink, инкапсулирующих в себе информацию о гиперссылках

Index

Возвращает значения индекса рабочего листа в семействе Sheets

MailEnvelope

Заголовок отсылаемого по электронной почте сооб­щения, созданного на основе рабочего листа

Name

Имя рабочего листа

Таблица 5.9. Свойства объекта Worksheet

Свойство

Описание

Names

Возвращает семейство Names всех имен данного рабочего листа

Outline

Возвращает объект Outline, инкапсулирующий в себе информацию о структуре, созданной на рабочем листе

PageSetup

Возвращает объект PageSetup, инкапсулирующий в себе информацию о параметрах страницы

ProtectContents

Свойство только для чтения, проверяющее установлена ли защита на содержимое рабочего листа

Name

Имя рабочего листа

Names

Возвращает семейство Names всех имен данного рабочего листа

Outline

Возвращает объект Outline, инкапсулирующий в себе информацию о структуре, созданной на рабочем листе

PageSetup

Возвращает объект PageSetup, инкапсулирующий в себе информацию о параметрах страницы

ProtectContents

Свойство только для чтения, проверяющее установлена ли защита на содержимое рабочего листа

ProtectDrawingObjects

Свойство только для чтения, проверяющее установлена ли защита на графические объекты

ProtectScenarios

Свойство только для чтения, проверяющее установлена ли защита на сценарии

Protection

Возвращает объект ^Protection, инкапсулирующий в себе информацию об установленной на листе защите

ProtectionMode

Свойство только для чтения, проверяющее установлена ли защита только пользовательского интерфейса

QueryTables

Возвращает семейство QueryTables состоящее из объектов QueryTable, инкапсулирующих в себе информацию о таблицах, построенных на основе запроса к внешним базам данных

Range

Возвращает объект Range, представляющий диапазон

Rows

Возвращает либо одну строку, либо семейство строк

Scripts

Возвращает семейство Scripts, состоящее из объектов Script, инкапсулирующих в себе информацию об используемых скриптах, когда лист сохраняется как Web-страница

ScrollArea

Задает диапазон, в котором разрешена прокрутка

Shapes

Возвращает семейство Shapes, состоящее из объектов Shape, инкапсулирующих в себе информацию о расположенных на листе фигурах

SmartTags

Возвращает семейство SmartTags, состоящее из объектов SmartTag, инкапсулирующих в себе информацию о смарт-тегах

StandardHeight

Возвращает стандартную высоту ячеек

StandardWidth

Возвращает стандартную ширину ячеек

Tab

Возвращает объект Tab, инкапсулирующий в себе информацию о теге листа

Type

Определяет тип листа. Допустимыми значениями могут быть следующие постоянные xlSheetType: xlChart, xlDialogSheet,

xlExcel4IntlMacroSheet, xlExcel4MacroSheet И xlWorksheet

UsedRange

Возвращает объект Range, который содержит данные

VPageBreaks

Возвращает семейство VPageBreaks, состоящее из объектов VPageBreak, инкапсулирующих в себе информацию о вертикальных разрывах страницы

Visible

Управляет видимостью листа. Допустимые значения: True (рабочий лист видим на экране), False (не видим, т. е. скрыт, но его можно отобразить на экране командой Формат ► Лист ►Отобразить), xlVeryHidden (скрыт, и его можно отобразить на экране только программно)

Проверка установки защиты на содержание

рабочего листа

Свойство ProtectContents возвращает значение True, если содержание рабочего листа защищено. Код листинга 5.31 проверяет наличие защиты содержания и в случае присутствия таковой предлагает ее снять.

Sub DemoProtectContents()

On Error Resume Next

If Worksheets(1).ProtectContents Then

MsgBox "Содержание рабочего листа защищено"

Worksheets(1).Unprotect

Else

MsgBox "Содержание рабочего листа не защищено"

End If

End Sub

Проверка существования рабочего листа

Все листы рабочей книги образуют семейство Sheets. Для того чтобы опре­делить, существует ли специфицируемый лист, достаточно попытаться получить на него ссылку и, в случае отсутствия таковой, перехватить генерируемую ошибку. Код листинга 5.32 демонстрирует подобный подход. Функция SheetExists возвращает значение True, если данный лист сущест­вует, и False — в противном случае.

Листинг 5.32. Проверка существования рабочего листа

Function SheetExists(SheetName As String) As Boolean

Dim obj As Object

On Error GoTo errorHandler:

Set obj = Sheets(SheetName)

SheetExists = True

Exit Function

errorHandler:

SheetExists = False

End Function