When you create a Contact and add the contact's birthday and/or anniversary a recurring event is added to your calendar. This feature cannot be disabled.
To remove the calendar named Birthday from Outlook.com or Office 365 mailboxes, see Remove the Holiday or Birthday calendar from Outlook.com or Office365
If you don't want the events added to your calendar, don't enter dates in the birthday and anniversary fields. Put the dates in the Notes field or a user defined field. Or delete the event from your calendar. Note that if you do this, Outlook may recreate it at some point.
However, if you import a contact list or sync with a handheld device, these events are not created in the calendar. In order to have them added you need to either edit the contact's name (clicking the Full Name button and saving the contacts is sufficient) or edit the Birthday and Anniversary fields to trigger an update. See the Tools below for utilities that can trigger the update.
See Removing Birthdays and Anniversaries for an easy way to remove the dates from Contacts and the events from the Calendar. There is also a VBA sample there to remove the events from the calendar as soon as the Contact creates it.
Reminders for Birthdays
When you create a new contact and specify a birth date, Microsoft Outlook automatically creates a recurring annual event in the Calendar folder for contact's birthday, but it doesn't set a reminder unless you have Outlook set to add a reminder to all new appointments (and in that case, it uses the default reminder time, usually 15 minutes).
If you want a longer reminder period, you will need to change the reminders on each birthday or anniversary or use VBA to set the reminders.
Dim WithEvents mcolCalItems As Items Private Sub Application_Startup() Dim objNS As NameSpace Set objNS = Application.GetNamespace("MAPI") Set mcolCalItems = objNS.GetDefaultFolder(olFolderCalendar).Items Set objNS = Nothing End Sub Private Sub mcolCalItems_ItemAdd(ByVal Item As Object) ' #### USER OPTIONS #### ' remind XX days before birthdays intDays = 7 If Item.Class = olAppointment And _ InStr(Item.Subject, "Birthday") > 0 Or InStr(Item.Subject, "Anniversary") > 0 Then With Item .ReminderSet = True .ReminderMinutesBeforeStart = 24 * 60 * intDays .Save End With End If End Sub
For help using the VBA Editor, see How to use Outlook's VBA Editor
Add Birthdays and Anniversaries to calendar
When you import Contacts (or sync with a smartphone) the birthdays are not added to the calendar. You have two choices: a macro or an add-in. The add-ins offer more features (and can offer a high return on investment) if you sync a lot, but for one time use, a macro is quick and effective.
This macro uses the Contact folder you are looking in. If you prefer to use the folder picker, change the Set MyFolder line to Set myFolder = Session.PickFolder
Sub AddBirthdaysAnniversaries() Dim myFolder As MAPIFolder ' To use the Contacts folder you are in Set myFolder = Application.ActiveExplorer.CurrentFolder For i = myFolder.Items.Count To 1 Step -1 If myFolder.Items(i).Class = 40 Then ' If you want to see that it's working, uncomment this line ' myFolder.Items(i).Display ' Copy the correct birthday and anniversary to a variable mybirthday = myFolder.Items(i).Birthday myanniversary = myFolder.Items(i).Anniversary ' Set today as the birthday & anniversary myFolder.Items(i).Birthday = Now myFolder.Items(i).Anniversary = Now ' Replace 'today' with the correct birthday & anniversary myFolder.Items(i).Birthday = mybirthday myFolder.Items(i).Anniversary = myanniversary ' Save and close myFolder.Items(i).Save myFolder.Items(i).Close 0 End If 'Repeat with next contact Next i End Sub
Convert Imported Birthdates
This macro will convert imported birthdays to recurring events.
Sub ConvertBDayRecur() Dim objOL As Outlook.Application Dim objItems As Outlook.Items Dim objFolder As Outlook.MAPIFolder Dim appItem As Object 'Outlook.AppointmentItem Dim pattern As Outlook.RecurrencePattern Set objOL = Outlook.Application Set objFolder = objOL.ActiveExplorer.CurrentFolder Set objItems = objFolder.Items On Error Resume Next For Each appItem In objItems If InStr(1, appItem.Subject, "'s Birthday") > 0 And appItem.Categories = "Birthday" Then With appItem 'make recurring Set pattern = appItem.GetRecurrencePattern pattern.RecurrenceType = olRecursYearly pattern.PatternStartDate = appItem.Start pattern.NoEndDate = True appItem.Save End With End If Next Set obj = Nothing Set objItems = Nothing Set objFolder = Nothing Set objOL = Nothing End Sub