- •Объектная модель
- •Полная и неявная ссылка на объект
- •Ссылка на активную рабочую книгу, лист, ячейку, диаграмму и принтер
- •Загрузка инсталлированной надстройки
- •Управление уровнем безопасности
- •Семейство встроенных диалоговых окон
- •Объект FileDialog
- •Методы объекта Application
- •Установка выполнения специфицированной процедуры при нажатии заданной комбинации клавиш
- •Переопределение горячих клавиш приложения
- •Проверка правописания отдельного слова
- •Симулирование ячеек рабочего листа
- •Электронные часы в ячейке рабочего листа
- •Получение данных из закрытой рабочей книги
- •События объекта Application
- •IgnoreReadOnlyRecommended — необязательный параметр, указывающий надо ли отображать предупреждение о том, что книга была сохранена в режиме "только для чтения";
- •Установка и снятие защиты книги
- •Методы объекта Worksheet
- •Объект Protection
- •События объекта Worksheet
- •Добавление к графическому объекту обработчика события Click
- •Примечание
- •Свойства объекта Range
- •Управление стилем границы диапазона и объекта Border
- •Функции rgb и qbColor
- •Доступ к отдельным ячейкам диапазона
- •Выбор элементов на рабочем листе или в книге
- •Объект Characters
- •Объект Comment
- •Определение текущего диапазона
- •Объект Font
- •Объект Interior
- •Установка числового формата
- •Переопределение размеров диапазона
- •Методы объекта Range
- •Табуляция функции
- •Заполнение диапазона по одному значению
- •Специальная вставка
- •Вставка диапазона с транспонированием
- •Бегущая картинка
- •Поиск значения в диапазоне
- •Повторный поиск и поиск всех значений
- •Поиск по формату
- •Замена значений
- •Ввод в диапазон неповторяющихся значений
- •Озвучивание текста
- •Построение графа
- •Пользовательские функции
- •Математические функции
- •Надстройки
- •Где хранятся макросы?
Ссылка на активную рабочую книгу, лист, ячейку, диаграмму и принтер
Свойства ActiveWorkbook, ActiveSheet, ActiveCell, ActiveChart, ActivePrinter объекта Application возвращают активную рабочую книгу, лист, ячейку, диаграмму и принтер. Объект ActiveCell содержится в ActiveSheet, а объекты ActiveSheet и ActiveChart и ActiveWorkbook.
В следующем примере (листинг 5.1) в активной ячейке устанавливается красный цвет фона с зеленым полужирным шрифтом и в нее вводится строка текста "Май". Активный рабочий лист переименовывается в отчет за май, а цвет его ярлыка назначается желтым.
Sub DemoActives()
With ActiveSheet
.Tab.Colorlndex = 27
' Желтый цвет
.Name = "Отчет за май"
End With
With ActiveCell
.Font.Bold = True
.Font.Color = vbGreen
' vbGreen — встроенная константа, задающая зеленый цвет
.Value = "Май"
.Interior.Color = vbRed
' vbRed — встроенная константа, задающая красный цвет
End With
End Sub
Загрузка инсталлированной надстройки
Свойство Addins объекта Application возвращает семейство инсталлированных надстроек. Например, в коде листинга 5.2 функция LoadAddin проверяет, установлена ли специфицированная надстройка (в данном случае Solver Addin). Эта функция возвращает значение:
0, если надстройка загружена;
1, если надстройка инсталлирована, но загрузить ее пришлось при помощи данной функции;
-1, надстройка не найдена;
-2, произошла ошибка при работе функции.
Напомним, что надстройку можно инсталлировать, выбрав команду Сервис►Надстройки.
Листинг 5.2. Проверка, установлена ли специфицированная надстройка
Function LoadAddin(AddlnTitle) As Integer
Dim ads As Addln
On Error GoTo ErrorHandler
For Each ads In Application.Addins
If ads.Title = AddlnTitle Then
LoadAddin = 0
If Not ads.Installed Then
Addins(AddlnTitle).Installed = True
LoadAddin = 1
End If
Exit Function
End If
Next
LoadAddln = -1
Exit Function ErrorHandler:
LoadAddln = -2
End Function
Sub TestO
MsgBox LoadAddln("Solver AddIn")
End Sub
Управление уровнем безопасности
Свойство AutomationSecurity объекта Application позволяет управлять уровнем безопасности при открытии рабочей книги. Это свойство возвращает одну из следующих MsoAutomationSecurity констант:
msoAutomationSecurityByUI — используется уровень безопасности, специфицированный диалоговым окном, отображаемым при открытии рабочей книги;
msoAutomationSecurityForceDisabie — отключает без предупреждающего сообщения все макросы в открываемых рабочих книгах;
msoAutomationSecurityLow — все макросы включены.
Процедура из листинга 5.3 позволяет, используя диалоговое окно Open, открыть рабочую книгу с автоматическим отключением макросов. Для вызова диалогового окна Open применено свойство FileDialog объекта Application.
Листинг 5.3. Открытие рабочей книги с автоматическим отключением i макросов
Sub OpenWithMacrosOff()
Dim secAutomation As MsoAutomationSecurity
secAutomation = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityForceDisable
Application.FileDialog(msoFileDialogOpen).Show
Dim fn As String
fn = Application.FileDialog(msoFileDialogFilePicker).Selectedltems(1)
Application.Workbooks.Open fn
Application.AutomationSecurity = secAutomation
End Sub
Рабочая книга, в которой выполняется данный макрос
Свойство ThisWorkbook объекта Application возвращает рабочую книгу, содержащую выполняющийся в данный момент макрос. Это свойство может возвращать рабочую книгу, отличную от книги, возвращаемой свойством ActiveWorkbook, т. к. выполняемый макрос может находиться в неактивной книге.
Установка заголовка окна MS Excel
Свойство caption объекта Application возвращает или устанавливает текст в заголовке главного окна MS Excel. Задание значения свойства равным Empty возвращает заголовок, используемый по умолчанию. В следующем коде (листинг 5.4) из модуля ЭтаКнига первая процедура обрабатывает событие Open рабочей книги и устанавливает в качестве заголовка окна приложения текст "Отчет за 2005 год", а вторая обрабатывает событие BeforeClose рабочей книги и возвращает окну имя, используемое по умолчанию, т. е. "Microsoft Excel".
Private Sub Workbook_Open()
Application.Caption = "Отчет за 2005 год"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Caption = Empty
End Sub
Работа со строкой состояния
Свойство StatusBar объекта Application задает текст, отображаемый в строке состояния приложения. Если значение этого свойства равно False, то отображается текст, заданный по умолчанию. В следующем примере конструируется бегущая строка состояния (листинг 5.5). Эффект бега создается постепенным изменением количества пробелов, размещенных перед отображаемым текстом. Метод Wait объекта Application обеспечивает задержку выполнения приложения на указанный промежуток времени, в данном случае — секунду.
Листинг 5.5. Вывод бегущей строки в строку состояния
Function StatusString(ByVal LeftSpace As Integer, _
ByVal Message As String) As String
StatusString = Space(LeftSpace) & Message
End Function
Sub RunMessage()
Dim n As Integer
For n = 20 To 0 Step -1
Application.StatusBar = StatusString(n, "Hello!")
Application.Wait Now() + TimeValue("00:00:01")
DoEvents
Next
Application.StatusBar = False
End Sub
Отключение генерации событий
Свойство EnableEvents объекта Application позволяет отключать генерацию событий. Например, следующие три инструкции обеспечивают сохранение рабочей книги без отображения предупреждающего сообщения.
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
Установка типа курсора
Свойство cursor объекта Application устанавливает тип курсора в приложении. Допустимые значения:
xlDefault — курсор, используемый по умолчанию;
xlWait — песочные часы;
xlNorthwestArrow — стрелка в северо-западном направлении;
xlIBeam — вертикальная полоска.
Если вы используете нестандартный курсор, например, для уведомления пользователя, что приложение не зависло, а идут вычисления, по завершении вычислений не забудьте установить курсор, используемый по умолчанию в системе. Например, следующий код находит сумму обратных величин квадратов целых чисел (листинг 5.6). Так как суммируется достаточно много чисел, на время суммирования курсор принимает вид песочных часов. По завершении суммирования курсору назначается вид, используемый по умолчанию.
Листинг 5.6. Видоизменение типа курсора для уведомления о проводимых вычислениях
Sub DemoCursor()
Dim s As Double
Dim i As Long
Application.Cursor = xlWait
s = 0
For i = 1 To 1000000
s = s + 1 / I ^ 2
Next
Application.Cursor = xlDefault
MsgBox s
End Sub
Видоизменять курсор можно не только при вычислениях, но и при любых других действиях, например, при выборе ячейки. В следующем коде из модуля рабочего листа при выборе ячейки А1 курсор превращается в указатель, направленный на северо-запад, а при выборе любой другой — он принимает тот вид, который используется в приложении по умолчанию (листинг 5.7).
Листинг 5.7. Видоизменение типа курсора при выборе специфицированной ячейки. Модуль рабочей книги
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
Application.Cursor = xlNorthwestArrow
Else
Application.Cursor = xlDefault
End If
End Sub
