Добрый день! Решил написать небольшой макрос по регистрации входящей почты outlook в книге excel. Получилось следующее: 1. в Excel необходимые данные (от кого, кому, тема письма) благополучно переносятся. 2. нумерация писем в excel производится автоматически (от 1-го и далее). 3. если пользователь ввел свой номер (например 420, нумерация продолжается с этого номера). 4. каждый раз при запуске макроса производится оценка уже существующих позиций, и новые значения добавляются в строчки Excel уже после существующих.
Но вот возникла какая проблема. Каждый раз когда я запускаю макрос, он добавляет мне в новые позиции все имеющиеся письма с учетом поступивших новых. Т.е. происходит многоступенчатый дубляж одних и тех же писем каждый раз когда я запускаю макрос.
Мне же нужно чтобы программа работала так: При запуске макроса тот проверяет папку с входящими (в моем случае вместо входящей я выделил папку monitoring) и переносит значения в Excel, при следующем запуске макрос добавляет в Excel только те письма которых еще не было, и так каждый раз. Попробовал entryID, провозился с ним, толком ничего не вышло. Файл прилагаю. Прошу вашей помощи.
Добрый день! Решил написать небольшой макрос по регистрации входящей почты outlook в книге excel. Получилось следующее: 1. в Excel необходимые данные (от кого, кому, тема письма) благополучно переносятся. 2. нумерация писем в excel производится автоматически (от 1-го и далее). 3. если пользователь ввел свой номер (например 420, нумерация продолжается с этого номера). 4. каждый раз при запуске макроса производится оценка уже существующих позиций, и новые значения добавляются в строчки Excel уже после существующих.
Но вот возникла какая проблема. Каждый раз когда я запускаю макрос, он добавляет мне в новые позиции все имеющиеся письма с учетом поступивших новых. Т.е. происходит многоступенчатый дубляж одних и тех же писем каждый раз когда я запускаю макрос.
Мне же нужно чтобы программа работала так: При запуске макроса тот проверяет папку с входящими (в моем случае вместо входящей я выделил папку monitoring) и переносит значения в Excel, при следующем запуске макрос добавляет в Excel только те письма которых еще не было, и так каждый раз. Попробовал entryID, провозился с ним, толком ничего не вышло. Файл прилагаю. Прошу вашей помощи.sir123
Ну я вижу 3и варианта. 1-й - простой перед запуском очищать лист. Тогда все данные будут каждый раз перезаписыватся. 2-й - тоже простой - посмотреть последнюю дату и время добавленных писем, и добавлять только новее письма 3-й - самый сложный создать словарь с уже существующими письмами и добавлять только те которых не было раньше. во вложении 3-й вариант не тестировал Тест - поскольку не пользуюсь outlook
Ну я вижу 3и варианта. 1-й - простой перед запуском очищать лист. Тогда все данные будут каждый раз перезаписыватся. 2-й - тоже простой - посмотреть последнюю дату и время добавленных писем, и добавлять только новее письма 3-й - самый сложный создать словарь с уже существующими письмами и добавлять только те которых не было раньше. во вложении 3-й вариант не тестировал Тест - поскольку не пользуюсь outlookSLAVICK
Даю 4-й. У MailItem есть пустое свойство BillingInformation, предназначенное для чтения/записи произвольного текста. Можно через него прямо в Outlook помечать ранее уже обработанные письма. Т.е. как-то так: [vba]
Код
myItem.BillingInformation = "сохранено в Excel"
[/vba] или, более интересно, прямо текущий счетчик макроса записывать: [vba]
Код
myItem.BillingInformation = fr
[/vba] Говорю не понаслышке - когда-то сам аналогично использовал это свойство для своих нужд. Правда, с тех пор менял место работы, поэтому код найду вряд ли.
Даю 4-й. У MailItem есть пустое свойство BillingInformation, предназначенное для чтения/записи произвольного текста. Можно через него прямо в Outlook помечать ранее уже обработанные письма. Т.е. как-то так: [vba]
Код
myItem.BillingInformation = "сохранено в Excel"
[/vba] или, более интересно, прямо текущий счетчик макроса записывать: [vba]
Код
myItem.BillingInformation = fr
[/vba] Говорю не понаслышке - когда-то сам аналогично использовал это свойство для своих нужд. Правда, с тех пор менял место работы, поэтому код найду вряд ли.Gustav
Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Set objFolder = objNamespace.GetDefaultFolder(6).Folders("Monitoring") '6=olFolderInbox
Application.ScreenUpdating = False
'On Error Resume Next For Each objMail In objFolder.Items IdMail = objMail.EntryID If Application.CountIf(Range("G:G"), IdMail) = 0 Then iRow = iRow + 1: iCount = iCount + 1 Cells(iRow, 1) = iCount Cells(iRow, 2) = objMail.SenderName Cells(iRow, 3) = objMail.SenderEmailAddress Cells(iRow, 4) = objMail.Subject Cells(iRow, 5) = objMail.CreationTime Cells(iRow, 6) = Left(objMail.Body, 100) Cells(iRow, 7) = IdMail '"'" & IdMail End If Next
objOutlook.Quit
Application.ScreenUpdating = True
[/vba] [moder]Для оформления кодов есть специальная кнопочка #. На первый раз поправил за Вас.[/moder]
Спасибо друзья! Вопрос решился. Привожу код. если кому надо:
[vba]
Код
Dim objOutlook As Object, objNamespace As Object Dim objFolder As Object, objMail As Object Dim iRow&, iCount&, IdMail$
Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Set objFolder = objNamespace.GetDefaultFolder(6).Folders("Monitoring") '6=olFolderInbox
Application.ScreenUpdating = False
'On Error Resume Next For Each objMail In objFolder.Items IdMail = objMail.EntryID If Application.CountIf(Range("G:G"), IdMail) = 0 Then iRow = iRow + 1: iCount = iCount + 1 Cells(iRow, 1) = iCount Cells(iRow, 2) = objMail.SenderName Cells(iRow, 3) = objMail.SenderEmailAddress Cells(iRow, 4) = objMail.Subject Cells(iRow, 5) = objMail.CreationTime Cells(iRow, 6) = Left(objMail.Body, 100) Cells(iRow, 7) = IdMail '"'" & IdMail End If Next
objOutlook.Quit
Application.ScreenUpdating = True
[/vba] [moder]Для оформления кодов есть специальная кнопочка #. На первый раз поправил за Вас.[/moder]sir123
Сообщение отредактировал _Boroda_ - Пятница, 08.01.2016, 10:47
А как Вы думаете? В первом посте написано "в моем случае вместо входящей я выделил папку monitoring". У Вас такой папки нет, а Вы пытаетесь переменной objFolder сказать "Ты будешь папкой monitoring". Конечно она ругается - "Какой Мониторинг, нет у нас такого"
А как Вы думаете? В первом посте написано "в моем случае вместо входящей я выделил папку monitoring". У Вас такой папки нет, а Вы пытаетесь переменной objFolder сказать "Ты будешь папкой monitoring". Конечно она ругается - "Какой Мониторинг, нет у нас такого"_Boroda_
Спасибо, я просто не программист, поэтому тухо заходят эти строчки :-( Спасибо за детальный ответ.
т.е. мне надо укзать Входящие, вместо Мониторинга и она ее отсканирует, и соберет все емейлы?, а как она выввет емейлы, если в переписке человек 10-20?
Спасибо, я просто не программист, поэтому тухо заходят эти строчки :-( Спасибо за детальный ответ.
т.е. мне надо укзать Входящие, вместо Мониторинга и она ее отсканирует, и соберет все емейлы?, а как она выввет емейлы, если в переписке человек 10-20?Laa911
Только учтите, так как обработанные сообщения не помечаются то в зависимости от объемов переписки, будет процесс длится долго или нет, но каждый раз по всем сообщениям будет обработка происходить.
Только учтите, так как обработанные сообщения не помечаются то в зависимости от объемов переписки, будет процесс длится долго или нет, но каждый раз по всем сообщениям будет обработка происходить.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Ох блин разобрался надо Visual Basic 1 Set objFolder = objNamespace.GetDefaultFolder(6).Folders("Входящие")'6=olFolderInbox удалить и скрипт начинает работать..
.Folders("Входящие")
Но текст письма почему то не полностью добавляется...
Ох блин разобрался надо Visual Basic 1 Set objFolder = objNamespace.GetDefaultFolder(6).Folders("Входящие")'6=olFolderInbox удалить и скрипт начинает работать..
.Folders("Входящие")
Но текст письма почему то не полностью добавляется...
Гиперссылку - скорее нет, а вот если иметь ID сообщения, то открыть уже получится
но оба вопроса за пределами данной темы. и не надо строчить очередями сообщений, их можно и нужно редактировать и дополнять, если забыли что написать.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
И еще хочется что бы был столбец Копия, и туда вставлялись все емейлы из поля копия.
И аналогично по исходящим....
И еще такой вопрос, а не видил ли кто на просторах интернета, скрипт который бы строил и показывал "силу" свзяи с тем или иным контактом, прям очень бы интересно было....
А как это все запилить на VB :-(?
И еще хочется что бы был столбец Копия, и туда вставлялись все емейлы из поля копия.
И аналогично по исходящим....
И еще такой вопрос, а не видил ли кто на просторах интернета, скрипт который бы строил и показывал "силу" свзяи с тем или иным контактом, прям очень бы интересно было....Laa911