Outlook 2003/2007 Rule and Conditions for InBox VBA customization

G

GreyCoderII

I would like Outlook to periodically examine my inbox items to do some
automated cleanup. Unfortunately the basic functionality of Rules Wizard does
not provide the two Conditions and Time interval setting I need to test to
apply an action. So I believe I must write a VBA Script to perform the
actions.

Outlook (out of the box) seems to be missing ability to set conditions on
any of the MailBoxItem properties (only some...) , and is missing a Check
Messages Periodically interval where Check either when arrive or when sent
exists.

I want to daily (After midnight) check all InBox items that are from certain
addresses (condition for rule exists), AND where the Item Property is
MailBoxItem.UnRead (does not exist in selection conditions presently) , and
the Item.DateReceived is > 7 days from todays date ie: item is older than 7
days, and then Move the item to another folder (Action can be set in current
Rules choices)

I am not VB/VBA programmer but I have done a little VB work , There are no
samples (or MS documentation) around that define all of the pieces I require
to write the Macro.
1) How to define and add new Conditions to existing Outlook Rule condition
choices?
2) How to Return a Boolean result from a Macro to be used in Rule condition
/action testing? ie: Return (Item.UnRead = True) ?? probably obvious to a VB
programmer .
3) What are the arguments required I assume MailBoxItem is passed as input
argument to all VBA Macros/Scripts called from OutLook client, it's weakly
documented.
4) How to set Rule execution interval to daily , and Inbox iteration?
5) What are all the properties of MailBoxItem ( I actually think it's out
there in bits and pieces.) I found UnR
6) What is the environment the VBA rule runs under ie: Context is already in
Application.Inspector or something or do all objects
Outlook/Application/Inspector etc.. need definition (Dim... As) as well as
Set (... = ???) for useage (This is probably obvious to a VB programmer..

Perhaps I will have to write an extension or Add in instead ?? seems silly
.... but.

Any help on how to write a rule to do what I want is appreciated.
GC
 
K

Ken Slovak - [MVP - Outlook]

A rule can call a script, which is a macro Sub with a signature that accepts
a passed MailItem. There can be no return value from a Sub, you'd have to
set a global variable.

In the context of Outlook VBA there is an Application object that always
refers to Outlook.Application.

To see the properties/methods/events exposed for any Outlook object use the
Object Browser (F2 in the Outlook VBA project). It's all in one place and
there's help available on any method/property/event by clicking F1 on
something in the Object Browser.

Unless you are using only Outlook 2007 you cannot define rules using code.
For Outlook 2007 you can use the new Rules collection, but what's available
there may or may not meet your needs. You'd have to see.

There may not be a code sample for everything you want, but there are
certainly all the bits and pieces. You can search at www.outlookcode.com for
samples covering the various pieces you want.

There is no way to run a rule at a timed interval in any version of Outlook.
You would need to use some sort of timer control to activate your code,
which would then have to call VBA macros to do the processing. If you have
VB6 installed you can put a timer control from that environment into a VBA
UserForm, otherwise you'd need to probably use a Win32 API timer class. You
can google for code that does that using VB6 at VBAccelerator.com, some
translation from VB6 to VBA would be required.

Once you have a timer established how you proceed from the timer event
handler depends on your Outlook version.

If you are using Outlook 2003 you can't call a rule from code so you'd need
to code things entirely without using rules.

For Outlook 2007, assuming that the available Rule object model can do what
you want you can instantiate a Rule object for that rule and call its
Execute method to execute the rule.

If the Rule object model can't do what you want you're back to pure VBA
code, without using rules at all.
 
G

GreyCoderII

Thank you Ken. Looks like I'll need to do some research and amalgamation of
techniques etc., the guideposts you suggested help .

Should there not be a way in which I could derive and enhance existing forms
and values and dialogs to add what I want?, ie: I wonder if I can wrap/derive
extend existing classes in Outlook Rules Wizard (Start from Blank rule) (and
add) a timer event so rule wizard lists "Check item in this folder Daily" ,
and Conditions for testing in Macro's Ie add a condition "If item is unread"
and condition "If Item is older than n days" . I guess the timer even routine
would need to examine the rules tree, etc...

Perhaps I should investigate a C# Plugin and add Timer etc.. And new
dialogs etc. It would just seem better to use existing UI and just add the
extensions to the existing UI and classes and selection string values etc...
I'll look at Outlook 2007 Rule Object model and probably only Outlook 2007
and later .
 
K

Ken Slovak - [MVP - Outlook]

Those ideas are nice but they don't buy you anything, nor does a COM addin.
There's nothing you can do there that you can't do in VBA, other than use a
different timer object. My guess is that you will end up having to do what I
suggested.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top