2015-07-10 3 views
1

Люди часто пересылают мне письма и просят меня ответить первоначальному отправителю, который находится в CC. Я думаю, что более аккуратно поставить этого человека в поле «Кому» и форвардера в СС. Поэтому мне нравится их менять. Я придумал этот кусок VBA:Outlook vba swap получатели

Sub Swap() 
Dim objMail As Outlook.MailItem 
Set objMail = Application.ActiveInspector.CurrentItem 

With objMail 
    a$ = .To 
    .To = .CC 
    .CC = a$ 
End With 

Set objMail = Nothing 
End Sub 

К сожалению, получатели копируются как текст. Поэтому Outlook будет искать их снова в адресной книге нашей компании. И поскольку это крупная компания, иногда она находит не того человека или даже утверждает, что человек неизвестен.

Я экспериментировал с objmail.Recipients, но у меня были только некоторые странные ошибки. Примечание. Возможно, в поле «Кому» и «ЦК» может быть несколько человек.

ответ

0

вы можете получить адрес электронной почты из objMail.Recipients(x).Address. Следующий код работает отлично на моей машине:

Public Sub Swap() 
Dim objOutlook As Outlook.Application ' i use this, because i'm working in MS Access 
Dim objMail As Outlook.MailItem 
Dim objRecipient As Outlook.recipient 
Dim strTo As String 
Dim strCC As String 

Set objOutlook = GetObject(, "Outlook.Application") ' i use this, because i'm working in MS Access 
Set objMail = objOutlook.ActiveInspector.CurrentItem 

For Each objRecipient In objMail.Recipients ' here we loop through all recipients 

    If objRecipient.type = olTo Then ' check if the current recipient is in To section 
     strCC = strCC & ";" & objRecipient.Address ' add it to the CC string 

    ElseIf objRecipient.type = olCC Then ' check if the current recipient is in CC section 
     strTo = strTo & ";" & objRecipient.Address 'add it to the To string 

    End If 
Next objRecipient 

If strTo <> "" Then 
    objMail.To = MID(strTo, 2) ' we cut off the leading semicolon of our string 
End If 

If strCC <> "" Then 
    objMail.CC = MID(strCC, 2) ' same here 
End If 

Set objMail = Nothing 
End Sub 
+0

Почему бы просто не изменить свойство Type надлежащим образом? –

+0

Я пробовал «Если objRecipient.type = olTo Then objRecipient.type = olCC', но это не сработало. Возможно, 'objMail.Recipients' должен быть обновлен или текстовые поля To и CC просто не отображают текущее значение. У меня не получилось так работать. Создав строку, она отлично работала. – Dorian

+0

> но это не сработало - что ты имеешь в виду? –

0

To свойства класса MailItem возвращает разделенную точку с запятой списка строк имен Дисплея для получателей для элемента Outlook. Это свойство содержит только отображаемые имена. Вместо этого для изменения получателей следует использовать коллекцию Recipients.

Вам просто нужно получить экземпляр коллекции Recipients, см. Свойство соответствия для класса MailItem, которое возвращает коллекцию объектов получателя для элемента Outlook. А затем измените свойство Type записей.

В зависимости от типа получателя, это свойство возвращает или устанавливает целое число, соответствующее числовой эквивалент одного из следующих констант:

  • JournalItem получатель: OlJournalRecipientType константа olAssociatedContact.
  • MailItem Получатель: один из следующих констант OlMailRecipientType: olBCC, ОБЦК, olOriginator или olTo.
  • Получатель MeetingItem: одна из следующих констант OlMeetingRecipientType: olOptional, olOrganizer, olRequired или olResource.
  • Получатель TaskItem: любая из следующих констант OlTaskRecipientType: olFinalStatus или olUpdate.