Может кто знает, как извлечь адресатов активного письма Outlook для присвоения их переменным в коде VBA?
Суть: Отправляю кодом письма в ответ на определенные. Делаю так - получил письмо, посмотрел вложение Excel, нажал кнопку - отправились письма нужным адресатам с соответствующими листами из Excel-вложения. Это уже есть и хорошо работает. Однако, при автоматической отправке писем, необходимо ещё в копию ставить тех, на чьё письмо отвечаю, т.е. как-то надо извлечь в VBA адресатов полученного исходного письма
Кто знает?
[p.s.]Рабочий макрос - в Excel
Привет всем, друзья!
Может кто знает, как извлечь адресатов активного письма Outlook для присвоения их переменным в коде VBA?
Суть: Отправляю кодом письма в ответ на определенные. Делаю так - получил письмо, посмотрел вложение Excel, нажал кнопку - отправились письма нужным адресатам с соответствующими листами из Excel-вложения. Это уже есть и хорошо работает. Однако, при автоматической отправке писем, необходимо ещё в копию ставить тех, на чьё письмо отвечаю, т.е. как-то надо извлечь в VBA адресатов полученного исходного письма
1. Я получаю письмо от Коллега1, в копии - Коллега2 (в копии может быть разное число Коллег) 2. Открываю вложение из этого письма (Excel-файл) 3. Запускаю макрос (он в Personal) 4. Часть Excel-вложения из этого письма отправляется вложением в новое письмо Коллега3 макросом (e-mail Коллега3 прописан в коде) 5. В новом письме, адресованном Коллега3, в копию надо поставить того, от кого я получил исходное письмо - Коллега1, и кто был в его копии - Коллега2 Как это сделать (п.5)?
1. Я получаю письмо от Коллега1, в копии - Коллега2 (в копии может быть разное число Коллег) 2. Открываю вложение из этого письма (Excel-файл) 3. Запускаю макрос (он в Personal) 4. Часть Excel-вложения из этого письма отправляется вложением в новое письмо Коллега3 макросом (e-mail Коллега3 прописан в коде) 5. В новом письме, адресованном Коллега3, в копию надо поставить того, от кого я получил исходное письмо - Коллега1, и кто был в его копии - Коллега2 Как это сделать (п.5)?Serge_007
Sub AVPO() Set myOlApp = CreateObject("Outlook.Application") Set myNamespace = myOlApp.GetNamespace("MAPI") Set myRecipient = myNamespace.CreateRecipient("ПОЧТА@terminal.ru") myRecipient.Resolve Set avpofolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderInbox) Dim msg As Outlook.MailItem If avpofolder.Items.Count > 0 Then For Each msg In avpofolder.Items Debug.Print "Кому: " & msg.To & " \ Копия: " & msg.CC 'Сюда можно вписать действия над почтовыми сообщениями Next End If End Sub
[/vba]
Макрос [vba]
Код
Sub AVPO() Set myOlApp = CreateObject("Outlook.Application") Set myNamespace = myOlApp.GetNamespace("MAPI") Set myRecipient = myNamespace.CreateRecipient("ПОЧТА@terminal.ru") myRecipient.Resolve Set avpofolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderInbox) Dim msg As Outlook.MailItem If avpofolder.Items.Count > 0 Then For Each msg In avpofolder.Items Debug.Print "Кому: " & msg.To & " \ Копия: " & msg.CC 'Сюда можно вписать действия над почтовыми сообщениями Next End If End Sub
msg.SendUsingAccount - это адрес отправителя msg.To - имя Получателя msg.CC - имя Получателей в копии К сожалению как получить адреса вместо имен из копии не знаю. [vba]
Код
Sub AVPO() Set myOlApp = CreateObject("Outlook.Application") Set myNamespace = myOlApp.GetNamespace("MAPI") Set myRecipient = myNamespace.CreateRecipient("ПОЧТА@terminal.ru") myRecipient.Resolve Set avpofolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderInbox) Dim msg As Outlook.MailItem If avpofolder.Items.Count > 0 Then For Each msg In avpofolder.Items Debug.Print "Кому: " & msg.To & " \ Копия: " & msg.CC & " \ Адрес отправителя: " & msg.SendUsingAccount & " \ Имя отправителя: " & msg.SenderName ' 'Сюда можно вписать действия над почтовыми сообщениями Next End If End Sub
[/vba]
msg.SendUsingAccount - это адрес отправителя msg.To - имя Получателя msg.CC - имя Получателей в копии К сожалению как получить адреса вместо имен из копии не знаю. [vba]
Код
Sub AVPO() Set myOlApp = CreateObject("Outlook.Application") Set myNamespace = myOlApp.GetNamespace("MAPI") Set myRecipient = myNamespace.CreateRecipient("ПОЧТА@terminal.ru") myRecipient.Resolve Set avpofolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderInbox) Dim msg As Outlook.MailItem If avpofolder.Items.Count > 0 Then For Each msg In avpofolder.Items Debug.Print "Кому: " & msg.To & " \ Копия: " & msg.CC & " \ Адрес отправителя: " & msg.SendUsingAccount & " \ Имя отправителя: " & msg.SenderName ' 'Сюда можно вписать действия над почтовыми сообщениями Next End If End Sub
Добрый вечер. Если письмо открыто в отдельном окне, [vba]
Код
With GetObject(, "Outlook.Application") 'текущее письмо, открытое в отдельном окне Set oMailItm = .ActiveInspector.CurrentItem 'ответное письмо, созданное действием Ответить всем Set oReply = oMailItm.Actions("Ответить всем").Execute 'отобразить ответное письмо oReply.display: AppActivate oReply.GetInspector.Caption End With
[/vba]
Добрый вечер. Если письмо открыто в отдельном окне, [vba]
Код
With GetObject(, "Outlook.Application") 'текущее письмо, открытое в отдельном окне Set oMailItm = .ActiveInspector.CurrentItem 'ответное письмо, созданное действием Ответить всем Set oReply = oMailItm.Actions("Ответить всем").Execute 'отобразить ответное письмо oReply.display: AppActivate oReply.GetInspector.Caption End With
Sub Ответить_всем() 'письмо должно быть открыто в отдельном окне With GetObject(, "Outlook.Application") 'текущее письмо, открытое в отдельном окне Set oMailItm = .ActiveInspector.CurrentItem 'ответное письмо, созданное действием Ответить всем Set oReply = oMailItm.Actions("Ответить всем").Execute 'отобразить ответное письмо With oReply .Display AppActivate .GetInspector.Caption .CC = .CC & "; " & .To .To = "Коллега3 Иван Иванович" .HTMLBody = "ПРОБА на письмо не отвечать" & Chr(13) & .HTMLBody .Send Debug.Print "Кому: " & .To & " \ Копия: " & .CC End With End With End Sub
[/vba] В начале Вас не понял, думал нужны Адреса, а оказывается нужны Адресаты
Sub Ответить_всем() 'письмо должно быть открыто в отдельном окне With GetObject(, "Outlook.Application") 'текущее письмо, открытое в отдельном окне Set oMailItm = .ActiveInspector.CurrentItem 'ответное письмо, созданное действием Ответить всем Set oReply = oMailItm.Actions("Ответить всем").Execute 'отобразить ответное письмо With oReply .Display AppActivate .GetInspector.Caption .CC = .CC & "; " & .To .To = "Коллега3 Иван Иванович" .HTMLBody = "ПРОБА на письмо не отвечать" & Chr(13) & .HTMLBody .Send Debug.Print "Кому: " & .To & " \ Копия: " & .CC End With End With End Sub
[/vba] В начале Вас не понял, думал нужны Адреса, а оказывается нужны Адресатыmsi2102
Сообщение отредактировал msi2102 - Четверг, 23.12.2021, 08:06
...я получил письмо, посмотрел вложение Excel, нажал кнопку - отправились письма нужным адресатам с соответствующими листами из Excel-вложения. Это уже есть и хорошо работает
при автоматической отправке писем, необходимо ещё в копию ставить тех, на чьё письмо отвечаю, т.е. как-то надо извлечь в VBA адресатов полученного исходного письма
Иными словами - мне надо адресатов добавить в уже существующий макрос в Excel Извлечь их из активного письма и запихать в переменные существующего макроса
Вот его часть, которая отвечает за отправку: [vba]
Код
With OutlookMail .To = Recip .CC = "коллеги, от которых получил исходное письмо точка ру" .BCC = "" .Subject = "Готово" & Wb.Name .Body = "Готово " & Sht.Name & ". Прошу закрыть транзакцию" .Attachments.Add Wb2.FullName .Send End With
[/vba] Recip - это адресат-получатель, его e-mail прописан в коде, а вот вместо "коллеги, от которых получил исходное письмо точка ру" должны быть те, кто были в письме, на которое я отвечаю
...я получил письмо, посмотрел вложение Excel, нажал кнопку - отправились письма нужным адресатам с соответствующими листами из Excel-вложения. Это уже есть и хорошо работает
при автоматической отправке писем, необходимо ещё в копию ставить тех, на чьё письмо отвечаю, т.е. как-то надо извлечь в VBA адресатов полученного исходного письма
Иными словами - мне надо адресатов добавить в уже существующий макрос в Excel Извлечь их из активного письма и запихать в переменные существующего макроса
Вот его часть, которая отвечает за отправку: [vba]
Код
With OutlookMail .To = Recip .CC = "коллеги, от которых получил исходное письмо точка ру" .BCC = "" .Subject = "Готово" & Wb.Name .Body = "Готово " & Sht.Name & ". Прошу закрыть транзакцию" .Attachments.Add Wb2.FullName .Send End With
[/vba] Recip - это адресат-получатель, его e-mail прописан в коде, а вот вместо "коллеги, от которых получил исходное письмо точка ру" должны быть те, кто были в письме, на которое я отвечаюSerge_007