- •Объектная модель
- •Полная и неявная ссылка на объект
- •Ссылка на активную рабочую книгу, лист, ячейку, диаграмму и принтер
- •Загрузка инсталлированной надстройки
- •Управление уровнем безопасности
- •Семейство встроенных диалоговых окон
- •Объект FileDialog
- •Методы объекта Application
- •Установка выполнения специфицированной процедуры при нажатии заданной комбинации клавиш
- •Переопределение горячих клавиш приложения
- •Проверка правописания отдельного слова
- •Симулирование ячеек рабочего листа
- •Электронные часы в ячейке рабочего листа
- •Получение данных из закрытой рабочей книги
- •События объекта Application
- •IgnoreReadOnlyRecommended — необязательный параметр, указывающий надо ли отображать предупреждение о том, что книга была сохранена в режиме "только для чтения";
- •Установка и снятие защиты книги
- •Методы объекта Worksheet
- •Объект Protection
- •События объекта Worksheet
- •Добавление к графическому объекту обработчика события Click
- •Примечание
- •Свойства объекта Range
- •Управление стилем границы диапазона и объекта Border
- •Функции rgb и qbColor
- •Доступ к отдельным ячейкам диапазона
- •Выбор элементов на рабочем листе или в книге
- •Объект Characters
- •Объект Comment
- •Определение текущего диапазона
- •Объект Font
- •Объект Interior
- •Установка числового формата
- •Переопределение размеров диапазона
- •Методы объекта Range
- •Табуляция функции
- •Заполнение диапазона по одному значению
- •Специальная вставка
- •Вставка диапазона с транспонированием
- •Бегущая картинка
- •Поиск значения в диапазоне
- •Повторный поиск и поиск всех значений
- •Поиск по формату
- •Замена значений
- •Ввод в диапазон неповторяющихся значений
- •Озвучивание текста
- •Построение графа
- •Пользовательские функции
- •Математические функции
- •Надстройки
- •Где хранятся макросы?
Методы объекта Range
Объект Range обладает большой коллекцией методов, предоставляющих в распоряжение разработчика возможность программировать целый спектр действий от копирования диапазона в буфер обмена до нахождения корня нелинейного уравнения. Перечислим основные методы этого объекта:
Activate |
AddComment |
AutoFill |
AutoFit |
BorderAround |
Clear |
ClearComments |
ClearComments |
ClearContents |
ClearFormats |
ClearNotes |
Copy |
CopyPicture |
Cut |
DataSeries |
Delete |
FillDown |
FillLeft |
FillRight |
FillUp |
Find |
FindNext |
FindPrevious |
FunctionWizard |
GoalSeek |
Insert |
PasteSpecial |
Replace |
Select |
Show |
Активизация и выбор диапазона
Метод Activate объекта Range активизирует диапазон, а метод Select выбирает диапазон, т. е. возвращает объект Selection. Например, в следующем коде сначала активизируется ячейка А2, затем в активную ячейку вводится число 1, после чего выбирается диапазон АЗ:А4 и в выбранный диапазон вводится число 3.
Range("А2").Activate
ActiveCell.Value = 1
Range("A3:A4").Select
Selection.Value = 3
Вставка и удаление комментариев в диапазон
Метод AddComment объекта Range вставляет комментарий в диапазон, а метод ClearComments его удаляет. Например, следующий код (листинг 5.51) сканирует диапазон А1:А100 и в случае, если в очередную ячейку входит строка "bhv", сначала очищает эту ячейку от комментариев, а затем вставляет в нее комментарий "Книга издательства БХВ-Петербург".
Листинг 5.51. Вставка и удаление комментариев в диапазон
Sub DemoComments()
Dim с As Range
For Each с In Range("A1:A100")
If c.Value Like "*BHV*" Then
с.CiearComments
c.AddComment "Книга издательства БХВ-Петербург"
End If
Next
End Sub
Заполнение диапазона прогрессией
Метод DataSeries объекта Range заполняет диапазон профессией. Метод DataSeries программирует выполнение команды Правка►Заполнить►Прогрессия.
DataSeries (RowCol, Type, Date, Step, Stop, Trend)
Здесь:
RowCol — необязательный параметр, определяющий направление, в котором создается профессия. Допустимые значения: xlRows (вдоль строк), xlColumns (вдоль столбцов). Если параметр опущен, то для задания направления используются размеры данного диапазона;
Type — необязательный параметр, специфицирующий тип прогрессии. Допустимыми значениями являются следующие постоянные XlDataSeriesType: xlDataSeriesLinear (линейная, используется по умолчанию), xlGrowth (геометрическая), xlChronoiogical (даты), xlAutoFill (автозаполнение);
Date — необязательный параметр, задающий тип последовательности дат, если параметр туре принимает значение xlChronoiogical. Допустимыми значениями являются следующие постоянные XlDataSeriesDate: xlDay (дни, используется по умолчанию), xlWeekday (дни недели), xlMonth (месяцы), xlYear (годы);
Step — необязательный параметр, определяющий шаг изменения прогрессии. По умолчанию полагается равным 1;
Stop — необязательный параметр, задающий предельное значение прогрессии. По умолчанию строится прогрессия во всем выделенном диапазоне;
Trend — необязательный параметр, принимает логические значения. Если значение параметра равно True, то создается арифметическая или геометрическая прогрессия, а если False, то создается список.
Например, следующие инструкции выведут членов арифметической профессии, шаг которой равен 2, 0 является ее первым членом, а 10 — последним, т. е. в диапазон А1:А6 будут выведены следующие числа: 0, 2, 4, 6, 8 и 10 (рис. 5.6).
Range("A1").Value = 0
Range("A1").DataSeries Rowcol:=xlColumns, _
Type:=xlDataSeriesLinear, _
Step:=2, _
Stop:=10
Р
ис.
5.6. Прогрессии
Следующие инструкции введут в диапазон В1:В5 членов геомефической профессии с коэффициентом — 3, первый член которой — 1. Таким образом, в диапазон В1:В5 будут выведены значения 1, 3, 9, 27 и 81 (см. рис. 5.6).
Range("B1").Value = 1
Range("B1:В5").DataSeries Rowcol:=xlColumns, _
Type:=xlGrowth, _
Step:=3
Следующие инструкции выведут в диапазон С1:С4 последовательность дат, члены которой отличаются ровно на месяц, т.е. значения 01.01.2005, 01.02.2005, 01.03.2005, 01.04.2005 (см. рис. 5.6).
Range("CI").Value = "1/01/05"
Range("C1:C4").DataSeries Rowcol:=xlColumns, _
Type:=xlChronological, _
Date:=xlMonth
Автозаполнение ячеек диапазона
элементами последовательности
Метод AutoFill объекта Range производит автозаполнение ячеек диапазона элементами последовательности. Метод AutoFill отличается от метода DataSeries тем, что явно указывается диапазон, в котором будет располагаться прогрессия. Метод AutoFill программирует копирование данных в диапазон, когда пользователь располагает указатель мыши на маркере заполнения исходного диапазона и перемещает его вниз и вправо, выделяя весь диапазон, в который переносятся исходные данные.
expression.AutoFill(Destination, Type)
Здесь:
expression — обязательный элемент, который задает диапазон, с которого начинается заполнение;
Destination — обязательный параметр, определяющий диапазон, который заполняется. Этот диапазон должен содержать диапазон, указанный в expression;
Type — необязательный параметр, указывающий тип заполнения. Допустимыми значениями являются следующие постоянные xiAutoFillType: xlFillDefault, xlFillSeries, xlFillCopy, xlFillFormats, xlFillValues, xlFillDays, xlFillWeekdays, xlFillMonths, xlFillYears, xlLinearTrend, xlGrowtnTrend. По умолчанию используется тот тип заполнения, который наиболее подходит к данным из диапазона, указанного в expression.
Например, следующие инструкции заполняют диапазон А1:А5 членами арифметической профессии, причем ее первыми двумя членами являются 1 и 3, т. е. те значения, которые предварительно были введены в ячейки А1 и А2 (рис. 5.7).
Range("A1").Value = 1
Range("A2").Value = 3
R
ange("A1:A2").AutoFill
Destination:=Range("A1:A5"), Type:=xlLinearTrend
Рис. 5.7. Последовательности
Следующие инструкции выводят члены геометрической прогрессии с теми же двумя начальными значениями в диапазон В1:В5 (см. рис. 5.7).
Range("B1").Value = 1
Range("B2").Value = 3
Range("B1:B2").AutoFill Destination:=Range("B1:B5"), Type:=xlGrowthTrend
Следующие инструкции выведут в диапазон С1:СЗ последовательность значений лето 2000, лето 2000 и Лето 2003 с шагом 1, определенным по умолчанию методом AutoFill (см. рис. 5.7).
Range("C1").Value = "Лето 2000"
Range("C1").AutoFill Destination:=Range("C1:C3"), Type:=xlFillSeries
Следующие две инструкции выводят в диапазон D1:D3 первые три члена списка — имена месяцев, начиная с январь (см. рис. 5.7).
Range("Dl").Value = "Январь"
Range("Dl").AutoFill Destination:=Range("D1:D3"), Type:=xlFillSeries
А последние две инструкции копируют содержимое ячейки Е1 на все ячейки диапазона Е1:ЕЗ (см. рис. 5.7).
Range("E1").Value = "Январь"
Range("E1").AutoFill Destination:=Range("E1:E3"), Type:=xlCopy
