How can I replace Outlook 2003 default Reminder form?

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

I would like to replace the Outlook 2003 default Reminder form. I have always
hated it's rather simplistic combo box approach with such limited choices of
times that a reminder can be set to re-display.

I want to replace Outlook's default Reminder form with a graphical interface
form that allows picking from a more compact and easier to use YY MM DD HH MM
SS set of dials. I have created such a form that works perfectly in Access.
But of course, Access' form creation and handling is not easily available
within Outlook. :(

I have replaced other Outlook forms before such as Contact and Message forms
so I am basically familiar with some of the hoops I have to jump through to
create custom forms and change the Registry to set them as new default forms.
It has been a while so I may be a bit dusty on those procedures. But it seems
to me that the Reminder form wasn't among those forms that use that type of
procedure.

I have many years of faily extensive experience programming in VB and VBA so
a programming solution is no real obstacle. I use Office 2003 Pro with all
the latest upgrades and fixes. I also have and use often a number of other
Office related apps such as Front Page and Publisher. In most of these I have
developed some fairly extensive programming solutions.

If anyone has any ideas about where I can go to get a start in the right
direction, I would certainly appreciate it!
 
The form displayed by Outlook for reminders is not an Outlook "item" form
like a contact or email form. There is no access to what Outlook is
displaying and how. You would have to disable the default reminders service
and create your own entirely from scratch to be able to display the form you
want to display.

You can see an example of this by going to
http://www.slovaktech.com/remindermanager.htm.

I completely replaced Outlook's reminders with a custom reminders mechanism
and disabled the native reminders mechanism to be able to do that. Much of
what I did was undocumented and I had to reverse engineer things and account
for the differences in handling things with different versions of Outlook.
It took about 2 years of research and testing before everything was working.
 
Hi Ken,

Thanks for the response!!! I reviewed your Reminder Manager. Seems like an
excellent application with lots of nice bells and whistles. But unfortunately
that does not do what I am looking for.

What I would like to see is actually a much simpler solution. I just want an
easier way to reset the reminder's date and time to pop up without having to
use the simplistic combo box provided on the default reminder pop up form. I
already had a pretty good idea the default Reminder form itself was going to
be hard coded and inaccessible. So I also knew that whatever I came up with
would almost certainly have to be a replacement for it.

But since I first posted this request I have done a bit more experimenting
with the way Reminders are handled in Outlook. For one thing, in the
"ThisOutlookSession" built-in standard module, I found that the sub procedure
"Sub Application_Reminder()" which is automatically called before the
reminder is even displayed.

That gives me a hook that will allow me to programmatically access the
Reminders' related Appointment Item. Having access to that allows me to
change the reminder's item's start field's date/time. Experimentation
confirmed that changing ".Start" to a future date/time will automatically
cancel the reminder even before it appears. So I am sure that is the
beginning point for my solution. But I can already see that method is going
to be a rather crude way of handling it. I really don't want to change the
Appointment Item itself if at all possible--even programatically.

What I really need is a way to access the reminder itself. Some further
experimentation led me to the following generalized code:
Dim OutlookApp As Outlook.Application
Dim OLRemindersALL As Outlook.Reminders
Dim i As Integer
Set OutlookApp = New Outlook.Application
Set OLRemindersALL = OutlookApp.Reminders
For i = OLRemindersALL.Count To 1 Step -1
With OLRemindersALL(i).Item
Debug.Print i; .Start; OLRemindersALL(i).Caption
....

That allowed me to list all reminders both visible (current) and invisible
(future). But what I haven't yet discovered is how to change the reminder's
parameters directly without changing the related Appointment Item.

How do I change the Reminder's date/time without changing the Item's .Start
value. If I could change that programatically before the Reminder appears,
then the reminder would automatically change from visible to invisible with a
new future reminder date/time. I believe that is going to be one part of the
solution.

For the other half of the solution, I have also done some work with creating
a form to use as a replacement for the Reminder form. I used a default
Appointment form as a base and marked all of the standard pages as hidden.

Then on the one blank page I marked as visible, I created user defined
fields to capture user input for the future reminder date/time--field names
like MM, DD, YYYY, HH, MM, AMPM. I intend to build some code to capture key
strokes in those fields and maybe use the "+" and "-" keys to allow the user
to increment/decrement the value in these fields. Once an "Ok" command button
is pressed to save the values, I would contatenate the field values to build
a date/time and use that to change the Reminder date/time. So I feel that
will probably be the other half of the solution.

I am only guessing at this point that I will be able to combine all that
together to get the final result I want. If you have any ideas along this
line--or possibly more importantly, defnitive reasons why this won't work--I
would most certainly appreciate it.

Bill Molony
 
Reminder.Snooze is one method you can try for changing the reminder time and
not an appointment start time. You can also sink the
Reminders.BeforeReminderShow event and set the Cancel argument to True to
cancel display of a reminder.

The Reminder item itself is actually the item with the reminder. So any
changes you make to it will be in the original item. For some types of items
you can set the reminder time directly (MailItem.FlagDueBy,
TaskItem.ReminderTime). For other types of items FlagDueBy is not available
in the Outlook object model (appointments and contacts). For those items
you'd have to use CDO 1.21 or Extended MAPI (C++ or Delphi only) or
Redemption (www.dimastr.com/redemption) to get at that property. That's what
needs to be changed to change the reminder time without changing the actual
start time.

Recurring items are another thing to watch for. Changing the reminder time
of a recurring appointment (or its start time) will create an Exception in
the Exceptions collection of the recurring appointment. You have to make
sure you get the actual current recurrence and not the master appointment.
 
Hi Ken,

WOW! Thanks MUCH. I belive that was exactly what I was looking for. I would
NEVER have thought about Reminder.Snooze as being the amount of time to
Snooze. Obviously, I had not looked at that one close enough. I looked at it
briefly but just passed over it and decided that it was like the Snooze
button--something to be pressed, a command with maybe a True/False or
something.

And obviously the .BeforeReminderShow event with it's Cancel argument would
be a necessary part of it too. I had not yet gotten far enough to investigate
that one. Both of those are obviously critical parts of my solution.

But right now I am still stuck on creating a form that will be suitable.
Outlook's form creation tools are far short of the capabilities of Access. I
have a clear idea of what I want but as of yet I have not been able to get an
Outlook form to work like I need it to. Very frustrating!

But again, thanks so VERY much for those pointers !

Bill
 
You're welcome.

Why an Outlook form at all? They are funky, use VBScript code and don't have
a decent code editor. Why not use a different type of form? If you are using
VBA code you can use a VBA UserForm. If VB 6 you could use a standard VB
form, if .NET code a Windows form, etc.

I often do that and only use Outlook forms in my code where I have to.
 
Hi Ken,

You have OPENED MY EYES to a brand new world. Even though I have been doing
VBA programming in Outlook, Access, etc. for many years, this is the first
time anyone has pointed me towards VBA UserForms! I had no idea they even
existed. Thank you, thank you, thank you!

I will be a good bit of experimenting with that over the next few days to
see where I can take this. It appears at first browse to be exactly what I
needed.

Be well,
Bill
 
Back
Top