ГД Арнольд,
Вы действительно можете использовать параметр ItemAdd
в соответствии с ответом @Brett.
Я использую аналогичный процесс для автоматической загрузки полученных данных (в виде вложения в электронном письме) и загрузки их в базу данных MySQL. Действие запускается методом ItemAdd, и письма проверяются одно за другим.
Упрощенные инструкции:
Добавьте класс в свой код VBA с именем «EventClassModule».
В своем классе введите
Public WithEvents dItems As Outlook.Items
В вашем ThisOutlookSession создайте подпрограмму, которая регистрирует event_handler:
Sub Register_Event_Handler()
Set myClass.dItems = Outlook.Items
End Sub
В вашем ThisOutlookSession создайте подпрограмму, которая обрабатывает событие ItemAdd, как показано ниже:
Private Sub dItems_ItemAdd(ByVal newItem As Object)
On Error GoTo ErrorHandler
Dim msg As Outlook.MailItem
If newItem.Class = olMail Then
Set msg = newItem
'Do something with the msg item, check rules, check subject, check whatever
'This will process messages when the arrive in your mailbox one by one.
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
Эти шаги должны предоставить вам подпрограмму, которая срабатывает при поступлении новой почты.
Затем вы можете вызвать функцию/подпрограмму, как показано ниже. Подпрограмма ниже запускает все правила на основе необязательной переменной ruleSet
, она проверяет rule.Name
на соответствие набору правил, и если строка ruleSet
существует в rule.Name
, то она выполняет некоторый код. Таким образом, вы можете иметь несколько правил и выполнять только некоторые из них в зависимости от того, частью какого «набора правил» они являются. Вы можете определить это, изменив их имя.
Это уточнение параметра «Правила запуска» в Outlook.
Часть этого кода взята отсюда: Настройка VBA для чтения личного почтового ящика
Sub runRules(Optional ruleSet As String)
Dim olStore As Outlook.Store
Dim myRules As Outlook.Rules
Dim tmpInbox As Outlook.Folder
Dim tmpSent As Outlook.Folder
Dim rl As Outlook.Rule
'On Error Resume Next
'toTmpBox (ruleSet)
' get default store (where rules live)
Set olStore = Application.Session.DefaultStore
With olStore
Set tmpInbox = .GetDefaultFolder(olFolderInbox) '.Folders("tmpInbox")
Set tmpSent = .GetDefaultFolder(olFolderSentMail) '.Folders("tmpSentBox")
End With
' get rules
Set myRules = olStore.GetRules
' iterate through all the rules
For Each rl In myRules
Debug.Print rl.Conditions.Body.Enabled & " " & rl.Conditions.Body.Text
If InStr(LCase(rl.Name), ruleSet) > 0 And (rl.Enabled) Then
rl.Execute ShowProgress:=True, Folder:=tmpInbox
If ruleSet = "autorun" Then
rl.Execute ShowProgress:=True, Folder:=olStore.GetDefaultFolder(olFolderSentMail)
End If
ruleList = ruleList & vbCrLf & rl.Name
End If
Next
' tell the user what you did
ruleList = "These rules were executed " & _
vbCrLf & ruleList
MsgBox ruleList, vbInformation, "Macro: RunMyRules"
CleanUp:
Set olStore = Nothing
Set tmpInbox = Nothing
Set tmpSent = Nothing
Set rl = Nothing
Set myRules = Nothing
End Sub
person
mtholen
schedule
16.10.2015
NewMailEx event
иItemAdd
кратко описаны - person brettdj   schedule 02.12.2011