Not dismissing the task, dismissing the reminder. Regardless does not fit your way.
This puts in a completed date. I assume you have set the recurrence to generate a new task when there is a completed date.
Option Explicit
Private WithEvents olRemind As Reminders
Private Sub Application_Reminder(ByVal Item As Object)
Dim olkContacts As Items
Dim olkContact As Object
Dim olkMsg As MailItem
Dim MyTaskFolder As Folder
Dim myTaskItems As Items
Dim myBirthdayTasks As Items
Dim myBirthdayTask As Object
Set olRemind = Reminders
If Item.subject = "Birthday Text" Then
Set olkContacts = Session.GetDefaultFolder(olFolderContacts).Items
For Each olkContact In olkContacts
If olkContact.Class = olContact Then
If (Month(olkContact.Birthday) = Month(Date)) And (Day(olkContact.Birthday) = Day(Date)) Then
Set olkMsg = Application.CreateItem(olMailItem)
With olkMsg
.Recipients.Add olkContact.Email1Address
'Change the subject as needed'
.subject = "Happy Birthday " & olkContact.FirstName
'Change the message as needed'
.HTMLBody = "Hi " & olkContact.FirstName & " Happy Birthday"
'Change Display to Send if you want the messages sent automatically'
.Display
End With
End If
End If
Next
Set MyTaskFolder = Session.GetDefaultFolder(olFolderTasks)
Set myTaskItems = MyTaskFolder.Items
Set myBirthdayTasks = myTaskItems.Restrict("[Subject] = ""Birthday Text""")
For Each myBirthdayTask In myBirthdayTasks
If myBirthdayTask.DueDate = Date Then
myBirthdayTask.DateCompleted = Date
myBirthdayTask.Save
Exit For
End If
Next
End If
Set olkMsg = Nothing
Set olkContact = Nothing
Set olkContacts = Nothing
End Sub
Private Sub olRemind_BeforeReminderShow(Cancel As Boolean)
Dim objRem As Reminder
For Each objRem In olRemind
If objRem.Caption = "Birthday Text" Then
If objRem.IsVisible Then
objRem.Dismiss
Cancel = True
End If
Exit For
End If
Next objRem
End Sub