Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управление в маркетинге средствами электронной почты. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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] ив справочнойсистемеVisualBasic. Синтаксисфункцииимеет следующийвид
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)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]