2016-11-18 25 views
0

Я создаю форму пользователя VBA, которая отвечает на активный адрес электронной почты Outlook шаблоном (разные шаблоны на основе выбора списка). Проблема прямо сейчас в том, что когда я «отвечаю всем», она захватывает только первое и последнее имя отправителя и получателей.VBA Excel - как ответить всем адреса электронной почты, а не только на имена

Отправители в основном за пределами компании, поэтому мне нужно его захватить и заполнить поле «Кому» фактическими адресами электронной почты. Если бы это было только в компании, пользователи были бы в каталоге компании, и это не было проблемой. Ближе всего я пришел к выводу, что это ответ How do you extract email addresses from the 'To' field in outlook?. Я чувствую, что информация, которая мне нужна, доступна там (только явным образом занимается захватом информации для получателей, но я полагаю, что тот же принцип применим к отправителю), но я не могу понять, как вставить его в мой код для желаемого результат.

Вот что я начиная с:

Private Sub CommandButton1_Click() 

Dim origEmail As MailItem 
Dim replyEmail As MailItem 

Set origEmail = ActiveExplorer.Selection(1) 
Set replyEmail = CreateItemFromTemplate("C:\Download Tool\Need Stat Code X.oft") 

replyEmail.To = origEmail.ReplyAll.To 

replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody 
replyEmail.SentOnBehalfOfName = "[email protected]" 
replyEmail.Display 

Set origEmail = Nothing 
Set replyEmail = Nothing 

End Sub 

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

Спасибо за ваше время и совет!

+0

Вопрос, на который этот ответ, не похож на ваш: http://stackoverflow.com/a/40193624/973283. Однако он включает макрос 'DemoExplorer', который я использую для удобного изучения свойств выбранных писем. Вы можете найти это полезным в качестве экспериментального инструмента. Я бы посмотрел свойство Recipients (как рекомендовано Hrothgar) и свойство CC. CC - это строка. Получатели - это коллекция (например, вложения), поэтому рассматривайте как массив с нижней границей 1 и верхними границами получателей. –

+0

Примечание: HtmlBody, вероятно, содержит заголовок и раздел тела.Вы просто конкатенируете целые строки, а не разделы. Некоторые пакеты электронной почты будут принимать любой старый мусор и сделать хороший кулак его отображения, но некоторые ожидают правильно структурированного Html. –

+0

Спасибо, что связали этот макрос! Я уверен, что в будущем это будет полезно. Что касается прямо сейчас, я не вижу, как это можно применить для вытягивания SMTP-адреса для использования в ответе на все. Дело не в том, что я не знаю, на какие адреса электронной почты отвечать, но я не знаю, как заполнить их через мой макрос. Как отмечалось в моем ответе на Hrothgar, я собираю это вместе, когда я иду, и если в DemoExplorer есть что-то, что я забыл, я был слишком тупым, чтобы заметить, не стесняйтесь бить меня по голове. – JCB

ответ

0

Благодаря как @hrothgar и @Tony для ответов. Я узнал о некоторых новых инструментах и ​​методах от каждого. В конечном счете, основываясь на информации, найденной в ваших ответах, я закончил поиск «vba get recipients string» и нашел Get item.recipient with Outlook VBA.

код теперь работает и выглядит следующим образом:

Private Sub CommandButton1_Click() 

Dim origEmail As MailItem 
Dim replyEmail As MailItem 

'new stuff 
Dim recip As Recipient 
Dim allRecips As String 
'end new stuff 

Set origEmail = ActiveExplorer.Selection(1) 
Set replyEmail = CreateItemFromTemplate("C:\Template Placel\My Template.oft") 

'more new stuff 
For Each recip In origEmail.Recipients 
If (Len(allRecips) > 0) Then allRecips = allRecips & "; " 
allRecips = allRecips & recip.Address 
Next 
'end more new stuff 

replyEmail.To = origEmail.SenderEmailAddress & "; " & allRecips 'updated to find sender email and 

replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody 
replyEmail.SentOnBehalfOfName = "[email protected]" 
replyEmail.Display 

Set origEmail = Nothing 
Set replyEmail = Nothing 

End Sub 

Внутренние контакты выглядят немного некрасиво в строке «Кому», но я проверил, и он получает работу.

Спасибо за помощь!

0

Если вы положили стоп после «Set origEmail = ...» и установили часы на origEmail, вы увидите свойства электронной почты. Включена коллекция получателей. Есть два (которые я вижу) типы, SMTP и EX. Для меня EX означает внутреннее. в каждом элементе в элементах получателей есть свойство, называемое адресом, а другое - адресным. Часть адресатов содержит тип адреса.

глубокий вдох

ОК, так что вы должны быть в состоянии преобразовать EX адреса во внутренние адреса, анализируя часть в конце, и вы можете просто положить SMTP из них, как есть, я думаю, , Создайте строку адресов в списке адресов получателей и поместите их в поля To и/или CC, и вы должны быть хорошими. Часть To или CC является получателем (n) .type свойство ...

думаю.

Гоша, я надеюсь, что кто-то вывешивает простой способ сделать это :)

+0

Это похоже на то, что я пытаюсь сделать, но я все еще не уверен, как это сделать. Я новичок в VBA и использую информацию, представленную в качестве платформы, чтобы выяснить, как кодировать то, что мне нужно ... но я ничего не придумываю. Как «установить часы на» origEmail? Кроме того, я не занимаюсь внутренними адресами EX. Они могут обрабатываться как SMTP для всех, что мне нужно (если нет чего-то, что может вызвать проблему, которую я не замечаю). Я просто не знаю, как вызывать SMTP-адреса, чтобы я мог заполнить поле «Кому» моего ответа. Благодарю вас за понимание. – JCB

+0

В редакторе VBA вы можете пропустить код по одной строке за раз, используя клавишу F8. В любой момент программы вы можете проверить содержимое переменной, установив часы. Щелкните левой кнопкой мыши на переменной в коде и нажмите «Добавить Watch». Это откроет окно просмотра (или вы можете сделать это в меню просмотра), и при прохождении кода вы можете увидеть значение переменной. Для объекта, такого как элемент электронной почты, вы можете щелкнуть знак плюса, и объект будет раскрываться, чтобы показать все свойства. В общем, вы можете получить доступ к этим свойствам, используя obj.this.that (itemnumber). – Hrothgar

 Смежные вопросы

  • Нет связанных вопросов^_^