Случается так, что вы ведете переписку с большим количеством людей и вам нужно всех их добавить в контакты. Можно по очереди открывать письма от разных отправителей и по очереди добавлять каждого отправителя в контакты. Есть другой, более простой способ - использовать макросы Outlook. В последнем варианте процедура создания контактов займет у вас меньше времени и вы сможете без труда просканировать огромное количество писем.
Создадим макрос, который будет сканировать письма и добавлять контакты из них.
- Запустите Outlook.
- Откройте Tools->Macro->Visual Basic Editor. Должно открыться окно редактора макросов.
- Если папка Modules не развернута - разверните ее, затем откройте Module1.
- Скопируйте код макроса, приведенный ниже и вставьте его в редактор макросов.
- Закройте окно редактора макросов.
- Проверьте, чтоб макрос AutoAddContact появился в списке, для этого нажмите Tools->Macro->Macros.
- Перейдите в папку, в которой содержатся сообщения, которые нужно просканировать.
- Выберите сообщения, отправителей из которых вы хотите добавить в контакты.
- Нажмите Tools->Macro->Macros, выберите AutoAddContact и нажмите Run.
- Откроется диалоговое окно с предупреждением, что программа пытается получить доступ к вашим почтовым сообщениям и спросит расрешения предоставить доступ. Разрешите доступ на 5 минут (этого вполне достаточно для сканирования даже очень большого числа писем). После этого макрос начнет работу, по очереди просканирует все вылеленные сообщения и добавит в список контактов адрес каждого отправителя, если его еще в списке контактов нет.
Макрос, для сканирования входящих писем
Sub AutoAddContact()
Dim olkContacts As MAPIFolder, _
olkContact As ContactItem, _
olkSelected As Selection, _
olkItem As Object, _
olkRecip As Recipient, _
strName As String
Set olkSelected = Application.ActiveExplorer.Selection
If olkSelected.Count > 0 Then
For Each olkItem In olkSelected
If olkItem.Class = olMail Then
Set olkContacts = Application.Session.GetDefaultFolder(olFolderContacts)
For Each olkRecip In olkItem.Recipients
strName = olkRecip.Name
If Left(strName, 1) = "'" Then strName = Mid(strName, 2)
If Right(strName, 1) = "'" Then strName = Mid(strName, 1, Len(strName) - 1)
Set olkContact = olkContacts.Items.Find("[FullName] = " & Chr(34) & strName & Chr(34))
If TypeName(olkContact) = "Nothing" Then
Set olkContact = Application.CreateItem(olContactItem)
With olkContact
.Email1Address = olkRecip.Address
.FullName = strName
.Body = "Record created automatically on " & Date & " at " & Time & " by BlueDevilFan's script."
.Categories = "Auto Added Contact"
.Save
End With
End If
Next
End If
Next
End If
Set olkContact = Nothing
Set olkContacts = Nothing
Set olkSelected = Nothing
Set olkItem = Nothing
Set olkRecip = Nothing
End Sub
Кастомизированный макрос, на случай, если нужно просканироавать отправленные сообщения.
В этом случае у вас может не быть возможности прочитать поле FullName, поэтому в данном варианте макроса сканируется тело письма на предмет наличия приветствия - как известно, за приветствием обычно следует имя, кого приветствуют.
Attribute VB_Name = "Module1"
Sub AutoAddContact()
Dim olkContacts As MAPIFolder, _
olkContact As ContactItem, _
olkSelected As Selection, _
olkItem As Object, _
olkRecip As Recipient, _
strName As String
Set olkSelected = Application.ActiveExplorer.Selection
If olkSelected.Count > 0 Then
For Each olkItem In olkSelected
If olkItem.Class = olMail Then
' Если это почтовое сообщение, то
' продолжаем дальше с ним работать
sBody = olkItem.Body
' Массив с приветствиями
Dim strHello(7) As String
strHello(0) = "Приветствуем Вас,"
strHello(1) = "Добрый день,"
strHello(2) = "И снова здравствуйте,"
strHello(3) = "Дорогая,"
strHello(4) = "Привет, прекрасня"
strHello(5) = "Милая, дорогая"
strHello(6) = "Доброго утра/дня/вечера,"
strHello(7) = "Здравствуйте,"
sName = ""
For lngPosition = LBound(strHello) To UBound(strHello)
sText = strHello(lngPosition)
lLen = Len(sText)
lPosStart = InStr(sBody, sText)
lPosEnd = InStr(sBody, "!")
If lPosStart > 0 And lPosStart < lPosEnd Then
sName = Mid$(sBody, lPosStart + lLen, lPosEnd - lPosStart - lLen)
End If
Next lngPosition
Set olkContacts = Application.Session.GetDefaultFolder(olFolderContacts)
For Each olkRecip In olkItem.Recipients
strName = olkRecip.Name
If Left(strName, 1) = "'" Then strName = Mid(strName, 2)
If Right(strName, 1) = "'" Then strName = Mid(strName, 1, Len(strName) - 1)
Set olkContact = olkContacts.Items.Find("[Email1Address] = " & Chr(34) & strName & Chr(34))
If TypeName(olkContact) = "Nothing" Then
'
Set olkContact = Application.CreateItem(olContactItem)
With olkContact
.Email1Address = olkRecip.Address
If Len(sName) = 0 Then
'.FullName = strName
.FirstName = strName
Else
'.FullName = strName
.FirstName = sName
End If
.Body = "Record created automatically on " & Date & " at " & Time & " by BlueDevilFan's script.\n Scrips was customized by Alex Kovtun"
.Categories = "Auto Added Contact"
.Save
End With
End If
Next
End If
Next
End If
Set olkContact = Nothing
Set olkContacts = Nothing
Set olkSelected = Nothing
Set olkItem = Nothing
Set olkRecip = Nothing
End SubИнформация почерпнута здесь.
There is 1 Comment
Спасибо, помогло в 2020)))
Спасибо, помогло в 2020)))
Добавить комментарий