The code sample on this page creates tasks from a selected appointment, with each task due in the days leading up to the appointment.
We also have a code sample that creates additional tasks from a selected tasks, with the start and due dates of the each task in the series 2 - 5 days after the previous task. The code can be tweaked to create a series of tasks or appointments from an email message or other Outlook items.
To use, select the master task (or appointment) and run the macro. To make it easier to use, assign a toolbar or QAT button to the macro.
This sample code uses the subject and date of the selected appointment to create tasks prior to the date. For example, a realtor needs to check on specific things at specific times prior to a home closing. The pattern is always the same but it does not fit within a recurrence pattern and each task is different, so they aren't true recurrences.
Updated December 7 2014 to handle a large number of tasks more efficiently.
To create more than five tasks, change the value in the i = 1 to 4 line and add additional Cases.
Public Sub CreateNewTaskFromSelectedAppointment() Dim obj As Object Dim Sel As Outlook.Selection Dim objAppt As Outlook.AppointmentItem Dim objTask As Outlook.TaskItem Dim objFolder As Outlook.MAPIFolder Dim i As Long Set Sel = Application.ActiveExplorer.Selection If Sel.Count Then Set obj = Sel(1) If TypeOf obj Is Outlook.AppointmentItem Then Set objAppt = obj For i = 1 To 4 Set objTask = Application.CreateItem(olTaskItem) Select Case i Case 1 objTask.StartDate = objAppt.Start - 20 objTask.DueDate = objTask.StartDate + 1 objTask.Subject = "20 days before: (" & objTask.DueDate & ") " & objAppt.Subject Case 2 objTask.StartDate = objAppt.Start - 15 objTask.DueDate = objTask.StartDate + 1 objTask.Subject = "15 days before: (" & objTask.DueDate & ") " & objAppt.Subject Case 3 objTask.StartDate = objAppt.Start - 10 objTask.DueDate = objTask.StartDate + 1 objTask.Subject = "10 days before: (" & objTask.DueDate & ") " & objAppt.Subject Case 4 objTask.StartDate = objAppt.Start - 5 objTask.DueDate = objTask.StartDate + 1 objTask.Subject = "5 days before: (" & objTask.DueDate & ") " & objAppt.Subject End Select ' Fields that will not vary between the tasks go here With objTask .Categories = objAppt.Categories .Body = objAppt.Body .Save ' .Display End With Next i End If Quit: Set objTask = Nothing Set obj = Nothing End If End Sub
How to use macros
First: You will need macro security set to low during testing.
To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, it’s at Tools, Macro Security.
After you test the macro and see that it works, you can either leave macro security set to low or sign the macro.
Open the VBA Editor by pressing Alt+F11 on your keyboard.
To put the code in a module:
- Right click on Project1 and choose Insert > Module
- Copy and paste the macro into the new module.
More information as well as screenshots are at How to use the VBA Editor
The base for these code samples came from Journal: Create a new item based on an existing one.