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

на главную

Жанры

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

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

Шрифт:

Each. . . Next проще в использовании. Вот синтаксис:

For Each элемент In группа

(операторы для выполнения при каждом проходе цикла)

Next элемент

Ключевым различием в использовании For Each. . .Next и For. . .Next является то, что здесь вам не требуется указывать число повторений выполнения цикла- это за вас выяснит VBA. В операторе For Each с помощью переменной элемент определяется тип объекта в коллекции, а с помощью аргумента группа задается коллекция, с которой нужно работать.

Следующий простой пример работает в AutoCAD, где коллекция Blocks

является коллекцией объектов Block и каждый объект Block содержит неограниченное число графических объектов типа Cone (конус) или 3DFace (трехмерная поверхность). В этом фрагменте программного кода всего лишь отображается имя каждого объекта Block из коллекции Blocks:

Dim objB As Block

For Each objB In Blocks

Debug.Print objB.Name

Next objB

Ясно, что этот пример мир не переворачивает, но вы должны видеть его потенциальную мощь. Структура For Each. . .Next может вызывать любую комбинацию действий, доступных после вызова методов и свойств объектов, входящих в коллекцию.

Когда вам нужна определенная игла в коробке с иглами, другие иглы вас не интересуют.

Чтобы выполнить определенные действия по отношению к одному конкретному объекту в коллекции, используйте внутри структуры For Each. . .Next оператор If. . .Then.

Когда условие If... Then обнаружит объект вашей мечты, дальше искать станет бессмысленно, и тогда быстрый выход из цикла обеспечит оператор Exit For.

Снова обратившись к коллекции Blocks из AutoCAD, рассмотрим следующий пример:

Dim objК As Block

For Each objK In Blocks

If objK.Name = "Ерунда"

objK.Delete

Exit For

End If

Next objK

В этом примере вложенная конструкция If. . . Then используется для того, чтобы обнаружить объект Block с именем "Ерунда" среди всех объектов Block в коллекции Blocks.

После того- и только после того- как нужный Block найден, выполняются операторы внутри структуры If... Then. "Выполняются" здесь относится, главным образом, к первому из операторов, который удаляет объект Block. Миссия завершена. Цикл больше не нужен, поэтому Exit For прерывает его, и программа может продолжить свою работу.

Глава 13. Тонкости хранения данных: массивы и коллекции.

В этой главе ...

~ Использование массивов для управления наборами элементов одного и того же типа

~ Многомерные массивы

~ Объект Collection как альтернатива массивам

~ Создание своих собственных типов данных для работы с информацией, состоящей из родственных данных различных типов

К этому моменту вы должны чувствовать себя уверенно при работе с переменными хранящими данные любых типов, - от обычных чисел и строк текста до сложных, имеющих мощный потенциал, объектов. Но бывает, что ни один из встроенных типов данных VBA разработчика не устраивает. Часто необходимо работать с некоторым набором однотипных данных как с единым целым. В таких случаях используются массивы - структурированные боксы для хранения множеств элементов данных одинакового типа.

Работать с множествами элементов различных типов позволяют объекты Collection (коллекции), которые создаются на основе соответствующего встроенного класса VBA, При некоторых ограничениях использование коллекций бывает целесообразнее, чем применение массивов.

Иногда удобнее

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

Знакомство с массивами

Предположим, у вас есть набор чисел, представляющих цены, оценки за экзамен, расстояния от Земли до каких-то астрономических объектов или нечто другое. Представьте себе, что вы печатаете этот набор чисел в виде списка на листе бумаги, каждое число - в отдельной строке. То, что у вас получится, можно назвать простым массивом. Например:

Гарантированно выигрышные лотерейные номера

214236

54 5273

371453

891982

00000

941241

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

Ссылка на элемент массива

Каждый массив в VBA имеет имя, т.е. аналог заголовка списка на листе бумаги. Чтобы работать с отдельным элементом массива, нужно сослаться на него по имени массива и индексу - целому числу, соответствующему месту элемента в массиве. Например, выражение intLottoArray ( 3 ) ссылается на третий (или четвертый, в зависимости от системы нумерации) элемент массива с именем intLottoArray. Как вы, наверное, догадались, intв начале имени массива говорит о том, что в этом массиве предполагается хранить целые значения. Поэтому можно утверждать, что данные, хранящиеся в intLottoArray (3), представляют собой целое число.

Данные массива

При работе с массивами нужно помнить следующее.

* Можно создавать массивы данных любых типов. VBA с успехом хранит в массивах строки, даты, денежные значения и данные любых числовых типов.

* В одном массиве могут храниться данные только одного типа. Нельзя создать массив с раздельными ячейками для хранения и данных типа Date и данных типа String.

Правда, второе ограничение очень легко преодолеть. Как вы уже знаете, тип данных Variant допускает хранение данных любого из допустимых в VBA типов, и массивы данных типа Variant тоже вполне допустимы. Здесь следует иметь в виду, что информация, хранимая в виде данных типа Variant, занимает существенно больше места в памяти, чем та же информация в виде данных более определенного типа; для массивов произвольной длины это может потребовать дополнительно очень значительного расхода памяти. Но необходимость поместить в один массив неопределенной длины набор данных различных типов возникает крайне редко.

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

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

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Довлатов. Сонный лекарь

Голд Джон
1. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

Развод и девичья фамилия

Зика Натаэль
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Развод и девичья фамилия

Сила рода. Том 1 и Том 2

Вяч Павел
1. Претендент
Фантастика:
фэнтези
рпг
попаданцы
5.85
рейтинг книги
Сила рода. Том 1 и Том 2

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Седьмая жена короля

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Седьмая жена короля

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Начальник милиции 2

Дамиров Рафаэль
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции 2

Оружейникъ

Кулаков Алексей Иванович
2. Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Оружейникъ