- •Объектная модель
- •Полная и неявная ссылка на объект
- •Ссылка на активную рабочую книгу, лист, ячейку, диаграмму и принтер
- •Загрузка инсталлированной надстройки
- •Управление уровнем безопасности
- •Семейство встроенных диалоговых окон
- •Объект FileDialog
- •Методы объекта Application
- •Установка выполнения специфицированной процедуры при нажатии заданной комбинации клавиш
- •Переопределение горячих клавиш приложения
- •Проверка правописания отдельного слова
- •Симулирование ячеек рабочего листа
- •Электронные часы в ячейке рабочего листа
- •Получение данных из закрытой рабочей книги
- •События объекта Application
- •IgnoreReadOnlyRecommended — необязательный параметр, указывающий надо ли отображать предупреждение о том, что книга была сохранена в режиме "только для чтения";
- •Установка и снятие защиты книги
- •Методы объекта Worksheet
- •Объект Protection
- •События объекта Worksheet
- •Добавление к графическому объекту обработчика события Click
- •Примечание
- •Свойства объекта Range
- •Управление стилем границы диапазона и объекта Border
- •Функции rgb и qbColor
- •Доступ к отдельным ячейкам диапазона
- •Выбор элементов на рабочем листе или в книге
- •Объект Characters
- •Объект Comment
- •Определение текущего диапазона
- •Объект Font
- •Объект Interior
- •Установка числового формата
- •Переопределение размеров диапазона
- •Методы объекта Range
- •Табуляция функции
- •Заполнение диапазона по одному значению
- •Специальная вставка
- •Вставка диапазона с транспонированием
- •Бегущая картинка
- •Поиск значения в диапазоне
- •Повторный поиск и поиск всех значений
- •Поиск по формату
- •Замена значений
- •Ввод в диапазон неповторяющихся значений
- •Озвучивание текста
- •Построение графа
- •Пользовательские функции
- •Математические функции
- •Надстройки
- •Где хранятся макросы?
Доступ к отдельным ячейкам диапазона
Свойство Cells объекта Range, использованное без индексов, возвращает все ячейки диапазона, а с индексами — конкретную ячейку, специфицированную либо ее номером (один параметр), либо местоположением (два параметра).
Например, в следующем коде в диапазоне В1:СЗ все положительные значения заменяются на 1, а отрицательные — на — 1.
Dim с As Range
For Each c In Range("Bl:C3").Cells
If c.Value > 0 Then
c.Value = 1
Elself c.Value < 0 Then
c.Value = -1
End If
Next
Ту же задачу можно решить, используя свойство Cells с двумя параметрами, возвращающее ячейку, стоящую на пересечении указанной строчки и столбца. При этом надо помнить, что свойство Cells задает относительное расположение ячеек к диапазону.
Dim i As Integer
Dim j As Integer
For i = 1 To Range("B1:C3").Columns.Count
For j = 1 To Range("B1:C3").Columns.Count
If Range("B1:C3").Cells(i, j).Value > 0 Then
Range("B1:C3").Cells(i, j).Value = 1
Elself Range("B1:C3").Cells(i, j).Value < 0 Then
Range("B1:C3").Cells(i, j).Value = -1
End If
Next
Next
Если требуется задать абсолютное местоположение ячеек, то надо воспользоваться свойством cells рабочего листа, например, как это делается для задачи из предыдущего примера.
Dim i As Integer
Dim j As Integer
For i = 2 To 3
For j = 1 To 3
If Cells(i, j).Value > 0 Then
Cells (i, j).Value = 1
Elself Cells(i, j).Value < 0 Then
Cells (i, j).Value,= -1
End If
Next
Next
Выбор элементов на рабочем листе или в книге
Выбор элемента, например, диапазона на рабочем листе производится методом select. Например, для того чтобы очистить содержимое ячейки А1, ее надо выбрать, а затем к полученному объекту Selection применить метод ClearContents:
Range("A1).Select
Selection.ClearContents
Конечно, того же самого результата можно достичь, применив метод ClearContents непосредственно к объекту Range ("A1”):
Range("A1).ClearContents
Затем, не изменяя текущей активной ячейки, например, при помощи метода Offset переместиться к другой ячейке (в данном случае ячейке В2) и произвести над ней какие-либо действия, например, очистить ее содержимое:
Range("A1").Offset(1,1).ClearContents
Метод Select позволяет выбрать не только одну ячейку, но и целый диапазон. Например, первая из приводимых инструкций выбирает диапазон А1:В2, вторая — ячейки A1, B2, D9, а третья — диапазон В2:С4 и ячейки A1, D9.
Range("Al:В2").Select
Range("A1,B2,D9").Select
Range("A1,B2:C4,D9").Select
Метод Activate позволяет не только выбирать, но и активизировать указанный объект. Например, первая из приводимых далее инструкций активизирует рабочую книгу, в которой в данный момент выполняется макрос, вторая — окно с рабочей книгой Отчет.хls, а третья — рабочий лист Май.
ThisWorkbook.Activate
Windows(Отчет.хls").Activate
Sheets("Май").Activate
Свойство ActiveCell возвращает активную ячейку. Например, в следующем коде сначала определяется активная ячейка (например, ей будет А1), затем методом Offset возвращается ссылка на ячейку, которая находится на одну строку ниже и на три столбца правее активной, и эта ячейка затем выбирается методом Select (в данном случае Е2).
ActiveCell.Offset(1, 3).Select
Если есть несколько ячеек, имена которых образуют нумерованную последовательность, то для работы с ними можно воспользоваться оператором цикла. Например, в коде листинга 5.42 ячейкам с именами с_1, с_2 и с_з присваиваются в цикле значения, соответствующие их индексам.
Листинг 5.42. Работа с ячейками, имена которых представляют нумерованную последовательность
Sub SetValues()
Dim i As Integer
Dim cellName As String
For i = 1 To 3
cellName = "c__" & i
Range([cellName]).Value = i
Next
End Sub
Для того чтобы выбрать первую ячейку столбца/строки, в которой находится активная ячейка, можно воспользоваться следующими инструкциями:
ActiveCell.Offset(0, -ActiveCell.Column + 1).Select
ActiveCell.Offset(-ActiveCeii.Row + 1,0).Select
Для того чтобы выбрать диапазон от указанной ячейки (например, активной) вниз/вверх вдоль столбца или влево/вправо вдоль строки до первой пустой ячейки, подойдут следующие инструкции
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Range(ActiveCell, ActiveCell.End(xlUp)).Select
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
Для того чтобы выбрать диапазон ячеек от активной до другой ячейки, которая находится на специфицированном расстоянии от активной, можно применить следующую инструкцию:
Range(ActiveCell, ActiveCell.Offset(3, 4)).Select
Для того чтобы выбрать первую пустую ячейку в столбце/строке (в данном случае столбец А/первая строка), воспользуйтесь следующими инструкциями:
Range("A1").End(xlDown).Offset(1, 0).Select
Range("A1").End(xlToRight).Offset(0,1).Select
Для изменения размеров выбранного диапазона применяется метод Resize, который возвращает диапазон, имеющий указанные размеры и с левой верхней вершиной, совпадающей с соответствующей вершиной искомого диапазона. Например, если первоначально выбран диапазон В2:С4, то следующая инструкция выбирает диапазон B2:F5:
Selection.Resize(4, 5).Select
Как проверить, является ли
диапазон выбранным объектом?
Функция TypeName возвращает имя типа значения ее параметра. Поэтому, если надо проверить, является ли диапазон выбранным объектом, просто надо воспользоваться функцией TypeName (листинг 5.43).
Листинг 5.43. Проверка, является ли диапазон выбранным объектом
Function IsRange() As Boolean
If TypeName(Selection) = "Range" Then
IsRange = True
Else
IsRange = False
End If
End Function
Определение типа данных, хранимых в ячейке
Объект Application обладает большой коллекцией свойств вида isTypename, позволяющих идентифицировать тип значения. Код в листинге 5.44 демонстрирует, как эти свойства можно использовать для индикации типов данных, введенных в ячейки диапазона А1:А10.
Листинг 5.44. Определение типа данных, хранимых в ячейке
Sub ScanColumn()
For Each c In Worksheets(1).Range("Al:A10").Cells
If Application.IsText(c.Value) Then
c.Offset(0, 1).Formula = "Text"
Elself Application.IsNumber(с.Value) Then
c.Offset(0, 1).Formula = "Number"
Elself Application.IsLogical(c.Value) Then
с Offset(0, 1).Formula = "Boolean"
Elself Application.IsError(c.Value) Then
с Offset(0, 1).Formula = "Error"
Elself c.Value = "" Then
с Offset(0, 1).Formula = "(blank cell)"
End If
Next с
End. Sub
