- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
intРазмерКоллекции = col20Вопросов.Count
Его можно также использовать в условном выражении, как здесь:
If colPrices.Count > 1000
MsgBox "Слишком много позиций!"
End If
Кроме того, значение свойства Count можно использовать в цикле For . . . Next, чтобы выполнить некоторые действия по отношению ко всем элементам коллекции, например:
Dim Z As Integer
For Z = 1 To col Prices.Count
MsgBox "Цена " & col Prices ( Z)
Next Z
Но лучше для этого использовать цикл For Each. . . Next (см. главу 8).
Чтобы идентифицировать конкретный элемент в коллекции, используется индекс элемента или его имя (если оно определено). Например, значение элемента коллекции можно присвоить переменной:
datДеньРождения = colДниРождения("Василий Али-Бабаевич")
К сожалению, вам придется отслеживать имена самим - VBA не предлагает возможности прочитать имена элементов коллекции. Кроме того, нельзя изменить имя элемента иначе, как удалив этот элемент из коллекции и затем добавив его вновь.
Точно так же нельзя в существующий элемент коллекции поместить новое значение. Следующий оператор присваивания работать не будет: colInventory(1465) = 119
Опять же, единственный способ изменения значения в коллекции - удаление соответствующего элемента и добавление нового с новым значением. Подобных ограничений нет для объектов Dictionary (словарь), которые обсуждаются в главе 14.
Как уже было сказано, применение класса Collection VBA ограничивается тем, что в нем нельзя хранить данные пользовательских типов. С этим ограничением можно смириться, если выбрать подходящую систему создания имен элементов. В следующем примере при каждом проходе цикла For. . .Next в коллекции создается запись базы данных. Эта запись состоит из трех полей, каждое из которых идентифицируется именем, составленным из простого описательного признака и номера записи. Вот соответствующий программный код:
Dim I As Integer, strName As String
Dim strPhone As String, strAddress As String
For I = 1 To Total ' I идентифицирует номер записи
' получение данных для этой записи
strName = InputBox("Введите имя для этой записи")
strPhone = InputBox("Введите номер телефона для _ этой записи")
strAddress = InputBox("Введите адрес для этой записи")
' Добавление "полей" для этой записи в коллекцийе
colDatabase.Add strName, "Имя" & I
colDatabase.Add strPhone, "Номер телефона" & I
colDatabase.Add strAddress, "Адрес" & I
Next I
Впоследствии можно извлечь информацию, хранимую в отдельной записи по описательному признаку и номеру, как в следующем операторе:
MsgBox colDatabase("Имя2")
Если вы собираетесь создавать реальные программы для управления информацией в базах данных, не используйте для этого коллекции объектов - они имеют слишком много ограничений. Вместо этого используйте подключаемые компоненты доступа к базам данных (соответствующие примеры вы найдете в главе 14). Если же вы хотите выполнить всю работу самостоятельно, создайте свои собственные классы для объектов, позволяющих работать с пользовательскими типами данных. Ваши объекты должны позволять хранить в них любые комбинации данных, которые могли бы извлекаться как свойства. Кроме того, неплохо было бы добавить программный код для проверки правильности сохраняемой в отдельных элементах информации. (Модули классов рассматриваются, хотя и не слишком подробно, в главе 14.)
Определение своих собственных типов данных
Если вы не математик, многомерные массивы данных одного типа вам, скорее всего, вряд ли понадобятся. В практических задачах управления данными чаще приходится работать с наборами элементов совершенно разных типов. В VBA-программе для управления такой информацией лучше всего создать пользовательский тип данных.
Обычно приводят набившую оскомину аналогию между такими структурированными данными и карточками каталога (рис, 13.6), хотя персональные компьютеры уже давным-давно заполонили все вокруг, и, как мне кажется, сегодня вряд ли кто-то пользуется каталогами из карточек.
Рис. 13.6. На этих карточках хранится структурированная информация наподобие той, которая может быть представлена данными пользовательских типов в VBA
Огромное количество баз данных фактически представляет такого же типа организованную структуру, но в электронном виде. Ваза данных - это набор записей, каждая из которых состоит из полей для хранения отдельных элементов информации. Разные поля могут хранить данные совершенно различных типов (строки, числа, даты или что-то другое). Содержимое одного и того же поля при переходе от записи к записи может меняться, но тип хранимых в поле данных остается во всех записях одним и тем же.
Знакомство с пользовательскими типами данных
Пользовательский тип данных VBA представляет собой, так сказать, поселившуюся под одной крышей компанию выбранных вами типов данных. Определив пользовательский тип данных, вы получаете возможность объявлять переменные этого типа точно так же, как переменные встроенных типов.
Переменную пользовательского типа можно сравнить с отдельной карточкой в каталоге или одной записью в базе данных. А чтобы представить целый каталог с карточками или базу данных с записями, объявите массив данных пользовательского типа.
Объявление пользовательского типа данных
Для объявления пользовательского типа данных используется оператор Туре, как в следующем типичном примере:
Туре Персона
intНомер As Integer ' номер работника
strФамилия As String
strИмя As String
strAдpec As String
lngТелефон As Long
datДатаНайма As Date
End Type
Здесь объявляется новый пользовательский тип данных Персона. Как ясно показывают строки с отступами, этот тип состоит из целого значения, трех строковых значений, длинного целого и даты. (Обратите внимание на то, что при объявлении типа необходимо назначить каждому элементу имя - простого указания типа данных недостаточно.) Когда вы объявите переменную типа Персона, в этой переменной автоматически будет предусмотрено место для всех шести элементов, перечисленных в объявлении типа.
Обратите внимание и на то, что для оператора type требуется оператор End Туре, завершающий блок объявления. Если вы забудете об этой завершающей строке, компьютер будет ругать вас.
И еще: пользовательский тип можно объявить только на уровне модуля (в разделе объявлений в самом начале модуля). Внутри процедуры объявить пользовательский тип нельзя.
Объявление переменных пользовательского типа
Как и встроенные типы данных, пользовательский тип остается абстрактным понятием до тех пор, пока вы не объявите переменную соответствующего типа. Для этого не требуется что-то особенное- годится стандартный синтаксис объявления обычных переменных. Точно так же в объявлениях переменных пользовательского типа можно использовать ключевые слова Publiс, Private и Static. Вот пример объявления такой переменной с помощью стандартною оператора Dim:
Dim usrРаботник As Персона
Как видите, при этом не требуется объявлять элементы внутри пользовательского типа.
И хотя оператор Dim задает имя новой переменной, имена ее элементов фиксируются в объявлении соответствующею пользовательского типа.
Чтобы получить целую базу данных вашего пользовательскою типа, объявите массив с помощью оператора следующего вида:
Private Персонал( 1 То 25) As Перcона
Обработка информации, представленной пользовательским типом данных
После объявления переменной пользовательского типа ее можно "начинять" информацией. При этом необходимо присвоить значение каждому из элементов, составляющих тип.
А для этого нужно идентифицировать элемент с помощью имени переменной, за которым следую почка и имя элемента. Например:
usrРаботник.strФамилия = "Ёлкин"
При заполнении нескольких элементов сразу оператор With поможет сократить объемы необходимого печатания. Вот пример использования этого оператора:
"With из usrРаботник
.strФамилия = "Исаков"
.strИмя = "Василий"
.datДатаНайма - #12/9/48#
End With
Для присвоения данных элементам в массиве пользовательского типа используйте стандартные индексы массива. В следующем примере такой индекс задается переменной:
Персона ( intНомер).strИмя = "Марфа"
Работа с переменными пользовательского типа данных
Если переменная пользовательского типа хранит полный набор данных, можно присвоить ее содержимое другой переменной того же типа- все содержимое сразу, без копания в элементах, из которых состоят эти переменные. Например, чтобы присвоить содержимое переменной изгРаботник второй ячейке в массиве Персонал, используйте оператор
Персонал(2) = usrРаботник
Самое интересное, что этот трюк срабатывает также в случае чтения информации из файла и записи информации в файл на диске. Например, можно сохранить полную записей базу данных на диске с помощью программного кода следующего вида:

