Офисные задачи в Outlook 2002

эротика 2015 онлайн


Инициализация формы

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

Рассмотрением инициализации подобных свойств мы и займемся в этой главе, но для начала несколько слов о форме как таковой. Если рассматривать форму с позиций программирования, то она представляет собой не что иное, как класс VBA. Членами этого класса являются элементы управления, расположенные на форме, а методами — show (показать форму), Hide (скрыть форму) и т. д. Более того, пользователь может добавлять собственные члены и методы.

Помимо этого форма обладает и рядом процедур реакции на событие, стандартными из которых для всех классов VBA являются initialize и Terminate (см. раздел 20.5 "Классы и объекты").

Вернемся к нашей задаче и вспомним, что нам необходимо проинициализи-ровать три списка нашей формы, а именно: series, author и duration. Если duration фиксирован и состоит из 12 элементов (12 месяцев), то относительно списков авторов и серий так сказать нельзя. Количество членов в группе писателей может увеличиваться и уменьшаться, ровно также дело обстоит и с сериями. Исходя из этого пользователь должен иметь возможность, не модифицируя кода программы, изменить количество элементов любого из списков.

В следующих разделах подробно описываются способы инициализации списков.

Статическое заполнение списка

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

Программа 22.1. Статическое заполнение списка

{На панели Project} 1R UserForml & View Code {В окне кода}

Private Sub Init_Duration() 'Инициализация списка duration With duration

For i = 1 To 12

.Addltem i Next i

.Listlndex = 0 End With End Sub

Поясним код программы. Во-первых, мы создаем процедуру, которую впоследствии будем вызывать из конструктора формы. Во-вторых, используя оператор with, обращаемся к объекту формы duration. И наконец, в цикле от 1 до 12 инициализируем список.

После того как мы создали процедуру, ее необходимо вызвать. Естественно, что все процедуры инициализации мы будем размещать в конструкторе формы — процедуре — реакции на событие initialize.

Программа 22.2. Вызов процедуры из конструктора

Private Sub UserForm_Initialize()

Init_Duration End Sub

Теперь, нажав клавишу <F5>, вы можете убедиться, что список duration инициализируется верно.

Работа с файлами

Следующий список, который необходимо инициализировать, — series. В отличие от duration, как было отмечено выше, этот список может изменяться, поэтому мы решили хранить список с названием серий в специальном файле bookseries.ini и забирать информацию для инициализации именно оттуда.

Рис. 22.4. Архитектура файла bookseries.ini

Таким образом, пользователю необходимо лишь добавить название новой серии в данный файл, как сделанные изменения тут же отобразятся в форме. Архитектура файла инициализации показана на рис. 22.4.

Итак, перейдем непосредственно к написанию кода процедуры. Для ввода кода программы опять необходимо перейти в окно редактора кода, для чего выделите форму и нажмите клавишу <F7>.

Программа 22.3. Работа с файлами

Sub Init_Series()

Dim inifile As Integer

Dim srv As String

inifile = FreeFile

iniPath = "C:\bookseries.ini" 'Открываем файл для чтения

Open iniPath For Input As tinifile

Do

Input tinifile, tmp series.Addltem tmp 'Цикл до конца файла

Loop Until EOF(inifile)

series.Listlndex = 0 End Sub

Прокомментируем эту программу. Сначала объявляется переменная inifile, с которой будет отождествлен файл. Далее открывается файл bookseries. ini (хранящийся в корне диска С), после чего в цикле от начала до конца файла считываются построчно значения для списка серий.

Естественно, что и вызов процедуры init_Series необходимо поместить в тело конструктора userForm_initialize, который теперь будет выглядеть следующим образом.

Программа 22.4. Вызов процедуры lnit_Series из конструктора

Private Sub UserForm_Initialize()

Init_Duration

Init_Series End Sub

Взятие данных из Outlook

В предыдущей программе мы заполняли список динамически, считывая данные из файла. Переходя к инициализации списка авторов, отметим, что эта информация также способна динамически изменяться, но в отличие от серии книг, информация о писателях (по условиям задачи) хранится в Outlook, более того, условимся, что она хранится в отдельной папке Writers, являющейся подпапкой папки Contacts. Тогда процедура инициализации будет выглядеть следующим образом.

Программа 22.5. Инициализация данных из Outlook

Sub Init_Authors()

Объявление переменных

Dim nms As NameSpace

Dim fldContacts As MAPIFolder

Dim itms As Collection

Dim itm As Integer

Создание объекта, указывающего на данные Outlook

Set nms = Application.GetNamespace("MAPI") 'Создание объекта, указывающего на папку Контакты

Set fldContacts = nms.GetDefaultFolder(olFolderContacts) 'Присваеваем объекту значение подпапки Writers

Set fldContacts = fldContacts.Folders("Writers") 'создание объекта (семейство), содержащего все элементы папки Контакты

Set itms = fldContacts.items 'Организация цикла по всем контактам в папке

For itm = 1 То itms.Count

With itms(itm) 'Инициализация списка именами контактов

authors.Addltem .LastNameAndFirstName .End With

Next

authors.Listlndex = 0 End Sub

Итак, прежде всего, мы объявляем ряд переменных, после чего получаем ссылку на папку с контактами и организуем цикл по всем ее элементам. Как видите, все достаточно просто.

Назад Начало Вперед