Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Для определения диапазона на неактивном листе необходимо использовать совместно свойства Range и Cells для требуемого листа. Следующее выражение выполняет данную работу, правда, имеет достаточно громоздкий вид:

Worksheets("2"). _

Range(Worksheets("2").Cells(3,5).

Worksheets("2">.Cells(4,6))

Оператор With позволяет избежать излишних ссылок на рабочий лист. В следующем примере к тексту всего диапазона применяется полужирное форматирование:

With Worksheets("Лист2")

.Range(.Cells ( 3,5), .Cells ( 4,6) ).Font.Bold = True

End With

Обратите внимание, что точки перед каждым использованием свойства Cells необходимы для связи любой ссылки с требуемым рабочим листом. В случае отсутствия точек каждое свойство Cells будет относится к активному листу, что приведет к возникновению конфликта со ссылкой свойства Range.

Выполнение совместных действий с ячейками

Используя свойства диапазона, можно одним действием изменять характеристики целого диапазона. Следующая строка изменяет размер шрифта текста во всех ячейках диапазона:

Worksheets ("Лист1").Range("B12:H13").Font.Size = 14

Безусловно, можно и даже предпочтительно использовать структуру With, когда необходимо работать с несколькими свойствами или методами целого диапазона, как показано здесь:

With someRange ' определенная ранее объектная ссылка

.Value = 20 ' Значение всех ячеек устанавливается равным 20

.Font.Name = "Garamond"

. Font.Italic = True

.Locked = True someRange = .Name ' Сохраняется имя диапазона

End With

Работа с отдельными ячейками диапазона

Хотя можно с помощью одного оператора назначить одно значение всем ячейкам диапазона, как показано в предыдущем примере, в Excel нет метода, позволяющего с помощью единственного действия изменять имеющиеся значения многоячеечного диапазона. Оператор вроде someRange .Value = someRange . Value + 10 не работает. Вместо этого необходимо осуществить циклический перебор всех ячеек диапазона с помощью цикла For Each. . , Next. При использовании данной техники не требуется знание количества ячеек, входящих в диапазон. Вот пример работоспособного кода:

For Each aCell In Selection

aCell.Value = aCell.Value + 10

Next

Часто перед тем, как принять решение о выполнении действия над отдельной ячейкой или о вообще о выборе действия, требуется проверка содержимого ячейки. Основываясь на текущем значении ячейки, код может принять решение о форматировании ячейки, изменении ее значения или же использовании данного значения для выполнения других вычислений. В таком случае также используется цикл For Each . . . Next:

For Each aCell In Worksheets("2").Range("A5;B10")

If IsNumeric(aCell) Then

Select Case aCell

Case 5 to 10

aCell.Font.Underline = xlUnderlineStyleSingle

Case 10 to 20

aCell.Font.Italic = True

Case Is > 20

aCell.Font.Bold = True

End Select

End If

Next

Работа с выделениями

Прежде чем изменить значение или формат ячейки или нескольких ячеек, пользователь должен их выделить. Однако в VBA выделение ячеек не требуется, так как для идентификации ячеек, над которыми должны проводиться определенные действия, можно использовать объекты Range. Но в VBA есть инструменты, связанные с выделением; они используются для реализации двух возможностей - код способен определить, какие ячейки выделены пользователем, и код может показать пользователю место на рабочем листе, где происходит что-то важное.

Во многих случаях пользовательский код должен воздействовать на выбранные ячейки, как это делают встроенные команды Excel. Для доступа к выделенному пользователем диапазону используется свойство Selection (Выделение) объекта Application или Window. Свойство Selection объекта Application возвращает диапазон, выделенный на рабочем листе, активном в данный момент. Следующие два оператора идентичны:

Application.Selection.Value = 20

Selection.Value =2 0

Для того чтобы удостовериться в том, что ссылка всегда относится к определенному окну, независимо оттого, какое окно активно в текущий момент, необходимо использовать свойство окна Selection. В следующем примере продемонстрирована данная техника; также здесь показано, как установить объектную ссылку на диапазон, представляющий текущее выделение для повторного использования того же диапазона в дальнейшем:

Dim Sel Range As Range

Set SelRange = Windows("Инвентаризация игрушек.xls">.Selection

With SelRange

.CheckSpelling

.AutoFit

.Copy

End With

Когда VBA-программа вносит изменения в рабочий лист и необходимо, чтобы пользователь их заметил, следует воспользоваться методом Select (Выделить) для перемещения выделения на нужный диапазон, диаграмму или что-либо другое. Метод Select можно применять фактически к любому существующему в Excel объекту, в том числе к объектам Chart (Диаграмма) и всем их компонентам (каждая часть диаграммы является отдельным VBA-объектом). к объектам Shape (Форма) и, конечно же, к объектам Range.

Для выделения диапазона необходимо сначала активизировать рабочий лист, на котором диапазон находится, а затем использовать метод Select для объекта Range, как показано в данном примере:

With Worksheets(" ")

.Activate .Range("Разбитые сердца").Select

End With

Кстати, метод Select для объектов Worksheet, очевидно, не выполняет ничего, кроме активизации указанного рабочего листа, и не изменяет в нем существующее выделение. Другими словами, он эквивалентен методу рабочего листа Activate. Подобным образом методы Activate и Select можно использовать для активизации листа диаграммы, но ни один из методов в действительности не выделяет диаграмму. Вот пример;

Поделиться:
Популярные книги

Второгодка. Книга 2. Око за око

Ромов Дмитрий
2. Второгодка
Фантастика:
героическая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
Второгодка. Книга 2. Око за око

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.50
рейтинг книги
Ермак. Телохранитель

Князь Целитель 2

Ткачев Андрей Юрьевич
2. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 2

Я спас СССР! том 2

Вязовский Алексей
2. Я спас СССР
Фантастика:
альтернативная история
5.62
рейтинг книги
Я спас СССР! том 2

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Кодекс Императора

Сапфир Олег
1. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
4.25
рейтинг книги
Кодекс Императора

Группа крови на рукаве

Вязовский Алексей
1. ГК
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Группа крови на рукаве

Старый, но крепкий 3

Крынов Макс
3. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 3

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

Я еще не царь

Дрейк Сириус
25. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще не царь