Outlook: применить правила к текущему сообщению?
KMail имеет действительно полезную функцию: вы можете определить ряд правил, которые запускаются только при нажатии сочетания клавиш, а затем только для выделенных сообщений. Это позволяет мне прочитать сообщение, как оно поступает в папку "Входящие", а затем отправить его одним нажатием клавиши.
Как я могу повторить это в Outlook? Возможно, какой-нибудь VBA-скрипт, запускаемый нажатием клавиши, запускает все правила для всех выбранных в данный момент сообщений?
5 ответов
Да, вы можете сделать это, но вы должны быть немного хитрым. Обзор шагов: создайте правила регистрации, которые ищут категорию, затем заставьте кнопку запустить макрос, чтобы изменить сообщения, выбранные в эту категорию, и затем запустить правила. Смотрите полный ответ на этот вопрос, включая код макроса...
Быстрое выполнение правил Outlook по требованию?
Я сделал немного более сложный ответ, назвав правила, основанные на категории, с префиксом, чтобы они могли запускаться именно макросом, но это несколько необязательно.
Насколько велика ваша папка? Вы можете запускать правила вручную, но это относится ко всей папке, но я полагаю, что это может быть очень медленным, если ваша папка содержит большое количество сообщений.
Эта ссылка описывает использование "Управление правилами и оповещениями" на вкладке "Файл" для "Запустить правила сейчас".
К сожалению, нет способа запустить правила Outlook для выбранных сообщений. Только по папкам.:-(Даже используя Outlook Object Model в VBA.
Вы можете помочь себе со вспомогательной рутиной как это:
Public Sub TestMessageRule()
' Routine to test Mail Handlers MessageRule()'
' without incoming mail messages
' select an existing mail before executing this routine
Dim objItem As Object
Dim objMail As Outlook.mailItem
Dim started As Long
For Each objItem In Application.ActiveExplorer.Selection
If TypeName(objItem) = "MailItem" Then
Set objMail = objItem
' add the following declaration at the header:
' Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
started = GetTickCount()
MessageRule objMail
' showCheckerMail objMail.BillingInformation
Debug.Print "elapsed " & (GetTickCount() - started) / 1000# & "s"
End If
Next
End Sub
Ответ Нет и Да. Нет для сообщений, да для сообщений, которые вы перемещаете в папку.
Базовый VBA используется на многих сайтах http://www.slipstick.com/outlook/rules/run-outlook-rules-startup/
Sub RunAllInboxRules()
Dim st As Outlook.Store
Dim myRules As Outlook.Rules
Dim rl As Outlook.Rule
Dim count As Integer
Dim ruleList As String
'On Error Resume Next
' get default store (where rules live)
Set st = Application.Session.DefaultStore
' get rules
Set myRules = st.GetRules
' iterate all the rules
For Each rl In myRules
' determine if it's an Inbox rule
If rl.RuleType = olRuleReceive And rl.IsLocalRule = True Then
' if so, run it
rl.Execute ShowProgress:=True
count = count + 1
ruleList = ruleList & vbCrLf & rl.Name
End If
Next
' tell the user what you did
ruleList = "These rules were executed against the Inbox: " & vbCrLf & ruleList
MsgBox ruleList, vbInformation, "Macro: RunAllInboxRules"
Set rl = Nothing
Set st = Nothing
Set myRules = Nothing
End Sub
Если вы хотите запустить его для папки, в которую вы переместили сообщение (я), а не для папки "Входящие", укажите эту папку.
http://msdn.microsoft.com/en-us/library/office/ff864433%28v=office.14%29.aspx
Допустим, вы создали папку в папке "Входящие" с именем "RunRules"
Как только вы переместите сообщение (я) в папку:
Set fldRunRules = st.GetDefaultFolder(olFolderInbox).Folders("RunRules")
rl.Execute Folder:=fldRunRules