Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обработка сообщений MS Outlook / 25 сообщений из 30, страница 1 из 2
03.12.2010, 12:47
    #36993150
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Всем доброго времени суток.

Мне необходимо с помощью VBA установить связь между MS Outlook и MS Excell. Мне нужно сделать так, что бы после получения определенного письма от определенного отправителя в MS Outlook происходило присвоение определенного значения ячейке книги MS Excell.

Есть идеи?

Заранее спасибо.
...
Рейтинг: 0 / 0
03.12.2010, 13:07
    #36993221
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

Идея есть. Нужно в аутлуке написать обработчик входящей почты, который будет проверять ВСЕ новые сообщения по факту получения почты. И когда дойдет до "определенного письма от определенного отправителя" нужно будет открыть Excel файл и там произвести обновление ячейки.

Как Вам идея? Я сам придумал.
...
Рейтинг: 0 / 0
03.12.2010, 13:30
    #36993297
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shamanus,

Спасибо. Идея хороша. Но для меня непонятен процесс работы обработчика почты. Является ли его работа фоновой? Как работа этого скрипта будет сопрягаться с другими запускаемыми макросами в Excell?
...
Рейтинг: 0 / 0
03.12.2010, 13:33
    #36993311
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

В Outlook есть событие - получение новой почты. На это событие вешается обработчик. Ни на кого он влиять не будет.
...
Рейтинг: 0 / 0
03.12.2010, 13:41
    #36993328
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shamanus,

А можете немного детальней расписать процесс?

Я с Аутлуком весьма на "Вы". Где мне настроить обработку сообщений и последующую реализацию скрипта?
...
Рейтинг: 0 / 0
03.12.2010, 14:14
    #36993441
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

Запускаете аутлук
нажимаете Alt+F11
находите ThisOutlookSession
пишите
Код: plaintext
Private Sub Application_NewMail()
трах -бабах.... (с) и скрипт готов
...
Рейтинг: 0 / 0
03.12.2010, 14:19
    #36993464
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shamanus,

И точно. Спасибо большое!

А можно еще несколько вопросов?

Как сформулировать условие проверки нового входящего сообщения?
...
Рейтинг: 0 / 0
03.12.2010, 14:30
    #36993513
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

не понял вопрос. Что значит как сформулировать условие?

Код: plaintext
If x.SenderName= "Иванов Иван Иванович" and x.Attachments( 1 ).Name = "Файл от Иванова.xls" Then ....
...
Рейтинг: 0 / 0
03.12.2010, 14:56
    #36993607
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shamanus,

Почитал msdn.microsoft.com на тему .SenderName. Нашел там пример

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Application_NewMail()
    Dim myOlApp As Outlook.Application
    Dim myItem As Outlook.MailItem
    Set myOlApp = CreateObject("Outlook.Application")
    Set myItem = myOlApp.ActiveInspector.CurrentItem
    If myItem.SenderName = "XXX" Then
        MsgBox "This message is sent by XXX"
    End If
End Sub

Но MVB ругается. Выдает ошибку run-time 91, Object varieble or With block varieble not set.

Ругается на эту строку: "Set myItem = myOlApp.ActiveInspector.CurrentItem"
...
Рейтинг: 0 / 0
03.12.2010, 15:58
    #36993820
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

итем не тот выбрали

почитайте лучше форум, тут примеров по обработке почты валом. На моей памяти штуки 2-3. Там есть готовые коды.
...
Рейтинг: 0 / 0
03.12.2010, 16:02
    #36993834
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shamanus,

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

подскажите, пожалуйста, как правильно?
...
Рейтинг: 0 / 0
03.12.2010, 16:12
    #36993883
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

неправда Ваша, я сам лично тут писал один
...
Рейтинг: 0 / 0
03.12.2010, 16:31
    #36993961
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shamanus,

Я этот топик в числе прочих прочитал. В коде, который Вы привели, идет обработка сообщений из определенной папки. Мне же необходимо проверять все входящие сообщения.

Как я понял, моя задача найти что-то иное, вместо "ActiveInspector.CurrentItem", который обрабатывает открытое сообщение.
...
Рейтинг: 0 / 0
03.12.2010, 16:32
    #36993965
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glockShamanus,

Я этот топик в числе прочих прочитал. В коде, который Вы привели, идет обработка сообщений из определенной папки. Мне же необходимо проверять все входящие сообщения.

Как я понял, моя задача найти что-то иное, вместо "ActiveInspector.CurrentItem", который обрабатывает открытое сообщение.
эта "определённая" папка, как вы выразились, и есть та, что вам нужно
...
Рейтинг: 0 / 0
03.12.2010, 16:41
    #36993994
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Код: plaintext
1.
2.
3.
4.
    Set myOlApp = CreateObject("Outlook.Application")
    Set myNameSpace = myOlApp.GetNamespace("MAPI")
    Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myItem = myFolder.Items( 1 )
    SenderName = myItem.SenderName

Кажется таким образом получилось достигнуть необходимого результата
...
Рейтинг: 0 / 0
03.12.2010, 16:48
    #36994027
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

the struggle continues

Теперь мне нужно каким-то неведомым мне методом заставить Outlook записать данные на определенном листе определенной книги Excell.

Поскольку я до этого момента писал скрипты на VBA только для Excell, с ходу реализовать задуманное не получилось :(
...
Рейтинг: 0 / 0
03.12.2010, 17:57
    #36994297
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glockТеперь мне нужно каким-то неведомым мне методом заставить Outlook записать данные на определенном листе определенной книги Excell.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim EX As Excel.Application
Dim WB As Excel.Workbook
Set EX = CreateObject("Excel.Application")
Set WB = EX.Workbooks.Open("определенный файл.xls")
WB.Worksheets("Определенный лист").Cells( 1 ,  1 ) = "данные"
WB.Save
WB.Close
Set WB = Nothing
EX.Quit
Set EX = Nothing
...
Рейтинг: 0 / 0
03.12.2010, 17:58
    #36994300
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Надо либо подключить референс на эксель, либо определить EX и WB как Object
...
Рейтинг: 0 / 0
06.12.2010, 09:37
    #36996472
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Спасибо.

Код: plaintext
Set WB = EX.Workbooks.Open("определенный файл.xls")

А как установить связь с уже открытым файлом?
...
Рейтинг: 0 / 0
06.12.2010, 10:01
    #36996514
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glockА как установить связь с уже открытым файлом?
Код: plaintext
Set EX = GetObject(, "Excel.Application")
эта строка установит связь с уже запущенным экземпляром экселя. Далее надо перебрать коллекцию WorkBooks и найти нужную книгу.

Но тут есть нюанс, который я не знаю как обойти. Экселей может быть запущено несколько. Либо в результате того, что пользователь запустит два экселя ЯВНО (через ярлык экселя, а не через открытие книги) или экземляров понаделает другая программа через CreateObject (в том числе невидимых).
...
Рейтинг: 0 / 0
06.12.2010, 10:08
    #36996526
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shocker.Pro,

не подскажите, каким образом перебирать книги?

как оказалось, опыт VBA в Экселе тут совсем не помогает.
...
Рейтинг: 0 / 0
06.12.2010, 10:13
    #36996536
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glockне подскажите, каким образом перебирать книги?
как оказалось, опыт VBA в Экселе тут совсем не помогает.
Это еще почему не помогает?
Все коллекции перебираются одинаково.
Код: plaintext
1.
2.
For Each WB In XL.Workbooks
...
Next
можете анализировать свойство Name или Path или FullName
...
Рейтинг: 0 / 0
06.12.2010, 10:15
    #36996539
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glock,

Вообще не понятно, вроде как Эксель не позволяет открывать сразу две книги с одинаковыми именами, почему нельзя применить что-то типа
Код: plaintext
Workbook("Книга1.xlsm").Select
...
Рейтинг: 0 / 0
06.12.2010, 10:15
    #36996541
glock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
Shocker.Pro,

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

Буду пытаться.
...
Рейтинг: 0 / 0
06.12.2010, 10:18
    #36996547
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка сообщений MS Outlook
glockвроде как Эксель не позволяет открывать сразу две книги с одинаковыми именами,
Один эксель - да. Зато можно запустить два Экселя.

glockпочему нельзя применить что-то типа
Код: plaintext
Workbook("Книга1.xlsm").Select

Не Workbook, a Workbooks
можно, в принципе, можно даже не делать Select, а просто взять Item и им оперировать.
Только надо сделать обработчик ошибок, вдруг книги нет.
(впрочем, при работе с СОМ обработчик ошибок нужно делать всегда)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обработка сообщений MS Outlook / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]