Как я могу использовать vba для создания правила для перемещения отправленных элементов в папку?

В Outlook (2016 или 365) я хотел бы использовать VBA для создания правила, которое перемещает элементы, которые я отправляю конкретному человеку.

У меня есть большая часть кода (взято из примера кода Microsoft), но я не могу понять, что должны получить поля условий. Я знаю, что это неправильно (в объекте такого типа нет такого понятия, как «.sender»), но я не знаю, что мне СЛЕДУЕТ туда поместить. В ToOrFromRuleCondition есть только семь свойств (Application, Class, ConditionType, Enabled, Parent, Recipients и Session), и ни одно из них не связано с отправителем.

В приведенном ниже коде:

  • colRules, objRuleSend являются объектами Outlook.Rules
  • objToCondition — это Outlook.ToOrFromRuleCondition.
  • RuleName — это строка, содержащая только буквы
  • Адрес — это строковая переменная в формате имя.имя@компания.com.
Set colRules = Application.Session.DefaultStore.GetRules()
Set objRuleSend = colRules.Create(RuleName & "Send", olRuleSend)

Set objToCondition = objRuleSend.Conditions.SentTo
With objToCondition
  .Enabled = True
  .Sender = Address ' <-- this is the line that fails.
  .Recipients.ResolveAll
End With

person JimG    schedule 31.01.2018    source источник
comment
Код должен быть выложен как код, но, как обычно, эта функция не сработала.   -  person JimG    schedule 01.02.2018
comment
Итак, Мэт, как ты это исправил? (Или, что более важно, как я могу заставить его работать при создании поста? Я выделил весь код и нажал кнопку с фигурными скобками, но все, что он сделал, это сделал отступ. То же самое с ctrl-k.   -  person JimG    schedule 01.02.2018


Ответы (2)


Вы можете перехватить событие Application.ItemSend, проверить правильность получателей, а затем установить свойство MailItem.SaveSentMessageFolder в нужную папку.

person Dmitry Streblechenko    schedule 31.01.2018
comment
Да, но это просто переместить почту. Я хочу создать правило для элементов, отправляемых человеку. - person JimG; 01.02.2018
comment
Нет, при правильной настройке сообщение перемещается после его отправки. - person Dmitry Streblechenko; 01.02.2018
comment
Хорошо, теперь я это вижу. - person JimG; 01.02.2018
comment
Тем не менее, я действительно хочу использовать правило. Я работаю в справочной службе, и когда я получаю тикет, я создаю папку для писем этого человека, которые приходят ко мне туда и обратно. С этим решением мне пришлось бы менять код при открытии билета и снова при закрытии. Что я хочу сделать, так это создать два правила (одно для получения, одно для отправки) при первой отправке или получении клиенту, а затем удалить их оба после разрешения билета. - person JimG; 01.02.2018
comment
О, и у меня уже есть макрос создания правил, работающий для товаров, которые я получаю от своих клиентов. - person JimG; 01.02.2018
comment
Я не думаю, что вы можете - правило отправки позволяет копировать только в указанную папку. Можно ли написать короткий макрос VBA? - person Dmitry Streblechenko; 01.02.2018
comment
Это может быть вариант, но мне приходится переписывать код каждый раз, когда я добавляю или удаляю адрес клиента. - person JimG; 01.02.2018
comment
Однако я собираюсь отметить это как ответ, потому что мне нужно правило отправки только один раз: когда я впервые открываю беседу. Однако до этого я не могу создать правило, так как не знаю адрес клиента. Таким образом, мне не нужно создавать правило отправки. - person JimG; 01.02.2018

Это должно работать

Set colRules = Application.Session.DefaultStore.GetRules()
Set objRuleSend = colRules.Create(RuleName & "Send", olRuleSend)

Set objToCondition = objRuleSend.Conditions.SentTo
With objToCondition
  .Enabled = True
  .Recipients.Add Address ' <-- this is the line that is fixed.
  .Recipients.ResolveAll
End With
person Ruut    schedule 13.03.2019