Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Управление в маркетинге средствами электронной почты. Учебное пособие
.pdf
71
Select Case i
‘если Сообщение прислано с целью Регистрации, то
‘создается Контакт, его свойства, и Контакт выводится на экран
‘Адресату направляется Сообщение о том, что он зарегистрирован
‘удаляется сообщение из папки Входящие
Case 0
If infoArray(i) = “Регистрация” Then
флРегистрация = True
MsgBox “Сообщение принято для регистрации”
Set iCn = CreateItem(olContactItem)
iCn.JobTitle = «Студент»
iCn.Email1Address = iM.SenderEmailAddress
Else
MsgBox «Неправильное оформление поля Тема Сообщения»
End If
Case 1
iCn.CompanyName = infoArray(i)
Case 2
MsgBox «Год поступления» & infoArray(i)
Case 3
MsgBox «Факультет» & infoArray(i)
Case 4
MsgBox «Форма обучения» & infoArray(i)
Case 5
MsgBox «Специальность» & infoArray(i)
Case 6
iCn.FullName = infoArray(i)
Case 7
iCn.NickName = infoArray(i)
Case Else
MsgBox “Неправильное оформление поля Тема Сообщения”
End Select
Next i

72
If флРегистрация Then
iCn.Display
Set iNote = cN(“Ваше сообщение о Регистрации”)
Set iManswer = CreateItem(olMailItem)
With iManswer
.To = iCn.Email1Address
.Subject = «О Регистрации»
.Body = iCn.NickName & «!» & vbCrLf & iNote.Body
.Display
End With
iM.Delete
Else
Set iManswer = CreateItem(olMailItem)
Set iNote = cN(«Правила Регистрации»)
With iManswer
.To = iM.SenderEmailAddress
.Subject = «Неудачная попытка регистрации»
.Body = iNote.Body
.Display
End With
End If
cM.GetNext
Next
End Sub
Комментарии к макросу
Макрос Outlook потребует объект Outlook.Application. Мы
хотимобразоватьКонтактынаосновеинформации,котораясодержатсявСообщенияхпапкиВходящие.Целесообразно подготовитьответы(азначит,мы будетработатьсэлементами Сооб-
щения, которыебудем помещать в папку Исходящие)не в теле
макросов, как нами делалось ранее (например, Листинг 4),
а в виде Заметок. Это повысит надежность работы с макросами,поскольку принеобходимости отредактироватьтекстответногосообщениямыбудем редактироватьЗаметку,ане макрос.
Заметок целесообразно иметь две: первая — «Регистрация со-

73
стоялась»,вторая—«Регистрациянесостоялась».Перваябудет
информироватьадресатаорегистрации,и,еслихотите,поздравлятьегосэтимсобытием.ВтораяЗаметкадолжнасодержатьна-
поминанияоправилах регистрации.Таккак мыбудемработать
сЗаметкамиивходящимиСообщениями,тонампонадобятсясоответствующиеколлекцииипапки.Посколькумыбудемработать
спапками,тонампотребуетсяобъектNameSpace.
Особенность работы в Outlook состоит в том, что Сообще-
ния и Контакты,если они будут размещаться в соответствующих стандартных папках, могут создаваться непосредственно
изприложенияOutlook.Поэтомудляэтихэлементовмынебудем
объявлятьниобъектов-папок,ниобъектов-коллекций.
Отладка большого макроса
Листинг6—этобезмалого50строксловкода.Ошибкаводномединственномзнаке—ивсяэтаконструкциянебудетработать,азначит,лишаетсявсякогосмысла.Опытпоказывает,чтонадеятьсянато,
чтовсеэтозаработаетсразу,неимеетсмысла.Поэтомутысячираз
повторенная рекомендация — отлаживайтепрограммыпочастям.
Ксожалению,крекомендациямприслушиваютсяредко—каждый
должен сам набить свои шишки, каждый должен самостоятельно
сделатьвсесвоиошибки.Всвязисэтимцелесообразнорассмотреть
одинизвозможныхвариантовотладкимакроса.
Вмакросеможновыделитьключевыемоменты:
анализ поляa) Тема сообщения в папке Входящие и выде-
ление сообщений для регистрации; работа с функцией
Split();
созданиеэлементовb) КонтактиСообщениеиопределение
свойствэлементов;
чтениеc) Заметокпоихименам.
Попытаемсяотладитьэтотработающиймакроспошагам.
Ш
а г 1. Со з д а н и е э л е м е н т о в Ou t l O O k
Сампосебемакрос,создающийСообщениеэлектроннойпочты или Контакт, лишен какого-либо смысла. Действительно,

74
зачемсоздавать макрос,когдаего запустить будетсложнее,чем
создать любой элемент Outlook одним щелчком мыши. Но для
насважнонаучитьсясоздаватьэлементыOutlook,посколькуэто
будетчастьюболеесложнойпроцедуры.Листинг7представляет
макрос создания сообщения электронной почты.В макросе отсутствуюткомментарии,посколькутекстсампо себенастолько
красноречив,чтообъяснятьчто-либонеимеетникакогосмысла.
Листинг 7. Создание элемента Сообщение
Sub СообщениеСоздать()
' Кент, стр.43
Dim aOu As Outlook.Application
Dim iM As Outlook.MailItem
Set aOl = New Outlook.Application
Set iM = aOl.CreateItem(olMailItem)
iM.Display
End Sub
На основе макроса создания сообщения электронной почты легкосоздать макросы других элементов Outlook. Листинг
8представляетсобоймакрос созданияэлементаКонтакт.Этот
макросприводится,чтобы,во-первых,ещеиещеразпроизнести
призыввсегдастремитьсяиспользоватьвкачествеосновыновой
программыужеотлаженнуюпрограмму.Во-вторых,этотмакрос
иллюстрирует очень часто используемую конструкцию With …
End With,котораяупрощаетзаданиесвойствэлементаКонтакт.
Чтобы получить макрос, создающий Контакт, необходимо
скопироватьмакрос,создающийСообщениеэлектроннойпочты
(естественно,еслионсамработает),переименоватьегоивыполнитьнеобходимуюредакциюкода.Аименно:заменитьiMнаiCn,
аolMailItem—наolContactItem.
Листинг 8 представляет макрос, обеспечивающий создание
элементаКонтактивыводегонаэкран.
Sub КонтактСоздать()
Dim aOu As Outlook.Application
Dim iCn As Outlook.ContactItem
Листинг 8. Создание элемента Контакт

75
Set aOl = New Outlook.Application
Set iCn = aOl.CreateItem(olContactItem)
iCn.Display
End Sub
Листинг 9 представляет макрос, который создает контакт
и определяет ряд его свойств с использованием конструкции
With… End With.
Листинг 9. Создание Контакта и определение его свойств
Sub КонтактСоздатьСвойства()
Dim aOu As Outlook.Application
Dim iCn As Outlook.ContactItem
Set aOl = New Outlook.Application
Set iCn = aOl.CreateItem(olContactItem)
With iCn
.FullName = «Верещагин Игорь Тимофеевич»
.Email1Address = «kuu@bk.ru»
.CompanyName = «ВШЭ»
.BusinessAddress = «Старопетровский проезд»
.Display
End With
End Sub
Итак, в нашем распоряжении два работающих фрагмента
кода: макроссоздания Сообщения электронной почтыи макрос
созданияКонтакта.
Ш
а г 2. Чт е н и е за м е т к и
Создатьдвастандартных сообщения-ответа можнои в теле
макроса. Но если возникнет необходимость эти сообщения несколько изменить, нужно будет редактировать макрос — а это
чревато опасностью внести ошибку в код. Поэтому будет правильнымтекстсообщения-ответахранитьвЗаметке.Вэтомслу-
чаенеобходимоосвоитьпроцедуруобращениякЗаметке.
Листинг10представляетмакрос,которыйвыводитнаэкран
ЗаметкусименемПравила регистрации,расположеннуювстандартнойпапкеOutlook—Заметки.

76
Листинг 10. Использование свойств Заметки с обращением по имени
Sub ЗаметкуПоказать()
'Блок объявления переменных
Dim aOl As Outlook.Application
Dim oNS As Outlook.NameSpace
Dim oFN As Outlook.MAPIFolder 'объект - папка Заметки
Dim cN As Outlook.Items 'коллекция Заметок
Dim iNote As Outlook.NoteItem
‘Блок присваивания значений переменным
Set aOl = New Outlook.Application
Set oNS = aOl.GetNamespace(«MAPI»)
Set oFN = aOl.GetNamespace(«MAPI»).Folders(«Личные папки»).
Folders(«Заметки»)
Set cN = oFN.Items
Set iNote = cN(«Правила регистрации»)
iNote.Display
End Sub
Листингтакжененуждаетсявкомментариях.
а г 3. Ра б о т а С ф у н к ц и е й Sp l i t ()
Ш
Итак,сOutlookработаютдалеконевсепользователи,апроблема структуризации информации и обмена структурированной информацией остается. Предлагается следующее решение. Информация размещается в строго определенном месте
Сооб щения — в полеТема.Информацияпередаетсясо словомпаролем — Регистрация. Если это слово записано неправильно,ноприсутствуютнекоторыеоснованияпредполагать,чтоисследуетсяписьмо-претендент нарегистрациювБазеданных,то
формируетсяСообщение-ответсПравилами Регистрации.Поле
Темазаполняетсястрогоопределеннойинформацией,порцииинформацииразделеныпробеламиизнакамиточкасзапятой.Невсе
приведенныеаспектыотраженывмакросе(Листинг6),нонаша
задача — показать принципиальные возможности повышения
эффективностиработыс приложениемOutlook идостижимость
необходимыхрезультатоввобозримомбудущем.

77
Итак,естьстрока
Регистрация; МИПП; 2002; эк; дн; мн;
Гончаров Андрей Николаевич; Андрей
Необходимо разделить эту строку на информационные элементы,которыебудутопределятьсвойстваэлементаOutlookКон-
такт.Нампоказалось,чтодлярешенияподобнойзадачиудобно
использовать стандартную функцию Visual Basic Split(). Функцияпредназначенадляпреобразованиястрокисимволовводномерный массив, элементыкоторого нумеруются с ноля. ОписаниефункцииможнонайтивкнигахГарнаеваиКузьменко[3, 5]
ив справочнойсистемеVisualBasic. Синтаксисфункцииимеет
следующийвид
Split(Expression,[Delimiter],[Limit],[Compare])
Expression—преобразуемоестроковоевыражение;
Delimite—разделитьмеждуэлементамистроковоговыражения(поумолчаниюиспользуетсяпробел);
Limit—максимальноечислоэлементоввмассиве;еслизначениепараметраравно–1,тоограничениянаразмерностьмассиваотсутствуют.
Читатель, который не каждый день занимается разработкой
кода,изприведенногоописанияедвалиизвлечетдостаточноинформации,чтобыприступитькдействию.Этуинформациюможнопочерпнутьв Справочной системе VBAприложенияOutlook.
ЧтобыобратитьсякстатьеофункцииSplit(),необходимо
перейтивсредуVBE;1)
обратитьсяк2) Справочной системе(F1);
ввестивокнепоискасловоSplit.3)
На экране появится статья с описанием назначенияи параметров функции.К сожалениюдля многих, этобудет описание
наанглийскомязыке.
Листинг11представляет примерработы сфункцией Split(),
котораяпреобразовываетстрокуслов,разделенныхзнакамиточкасзапятойводномерныймассив.

78
Листинг 11. Работа с функцией Split()
Sub SplitStringGarnaev()
'Garnaev, 251
'отработка функции работы со строками
'состояние - рабочее
'Блок объявления переменных
Dim infoArray 'одномерный массив - результат действий функции
Split
Dim strInfo As String 'исходная строка, записанная в поле Тема
Сообщения
Dim i As Integer 'параметр цикла при считывании элементов массива
'Блок исходных данных
strInfo = «Регистрация; МИПП; 2002; эк; дн; мн; Гончаров Андрей Николаевич; Андрей»
'Функциональный блок
infoArray = Split(strInfo, «;», -1)
'Блок представления результатов
For i = LBound(infoArray) To UBound(infoArray)
MsgBox «i = « & i & « Array item - « & infoArray (i)
Next i
End Sub
Далеезадачабудетсостоятьвтом,чтобыинформацию,представленнуюстрокоюс разделителями,преобразоватьвсвойства
элементаКонтакт.
а г 4. Ра С щ е п л е н и е и н ф о Р м а ц и о н н о й С т Р о к и н а С в о й С т в а
Ш
Естественнее, может быть, читалась бы конструкция If…
Else… End If.Нооператоруправлениявычислительнымпроцессом
Select Case,пообщепринятомумнению,прощевотладке.Итак,
информационнаястрокасодержит8элементов,первыйизкоторых — слово Регистрация — является признаком. Листинг 12
представляетмакрос, которыйобеспечиваетвозможность манипулироватьэлементамиинформацииизинформационнойстроки.

79
ЦиклFor… Next используетприопределении интерваловизмененияпараметровцикла функцийLbound() иUbound(),которые
соответственноопределяютномераминимальногоимаксимальногоэлементовмассива.
Листинг 12. Определение элементов информационного массива
Sub РасщеплениеСтрокиНаСвойства()
'отработка функции работы со строками
'состояние - рабочее
'Блок объявления переменных
Dim infoArray 'одномерный массив - результат действий функции
Split
Dim strInfo As String 'исходная строка, записанная в поле Тема Сообщения
Dim i As Integer 'параметр цикла при считывании элементов массива
'Блок исходных данных
strInfo = «Регистрация; МИПП; 2002; эк; дн; мн; Гончаров Андрей Николаевич; Андрей»
'Функциональный блок
infoArray = Split(strInfo, «;», -1)
'Блок представления результатов
For i = LBound(infoArray) To UBound(infoArray)
Select Case i
Case 0
MsgBox «i = « & i & « Режим - « & infoArray(i)
Case 1
MsgBox «i = « & i & « вуз - « & infoArray(i)
Case 2
MsgBox “i = “ & i & “ Поступление - « & infoArray(i)
Case 3
MsgBox ”i = ” & i & ” Факультет - « & infoArray(i)
Case 4
MsgBox “i = “ & i & “ Форма обучения - « & infoArray(i)
Case 5
MsgBox ”i = ” & i & ” Специальность - « & infoArray(i)

80
Case 6
MsgBox “i = “ & i & “ Полное имя - « & infoArray(i)
Case 7
MsgBox ”i = ” & i & ” Короткое имя - « & infoArray(i)
End Select
Next i
End Sub
Использование оператора MsgBox в теле инструкции Select
Caseноситвременныйотладочныйхарактер—намнеобходимо
убедитьсявтом,чтонужнаяинформациябудетпоявлятьсявнужномместе.ВдальнейшемоператорыMsgBoxуступятместооператорамприсваивания.
Листинг13представляетмакрос,которыйнаосновеинформационнойстроки в полеТема Сообщенияопределяетсвойства
элементаКонтакт.
Листинг 13. Определение свойств Контакта на основе входящего Сообщения
Sub NewContactProperties()
Dim aOl As Outlook.Application
Dim iCn As Outlook.ContactItem
Dim infoArray
Dim strInfo As String
Dim i As Integer
Set aOl = New Outlook.Application
Set iCn = CreateItem(olContactItem)
iCn.NickName = “NickName”
strInfo = “Регистрация; МИПП; 2002; эк; дн; мн; Гончаров Андрей Николаевич; Андрей”
infoArray = Split(strInfo, «;», -1)
For i = LBound(infoArray) To UBound(infoArray)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
