This would work:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$D$7" Or Target.Address = "$M$5" Or Target.Address = "$M$6" Then showcalendar
End Sub
or:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$D$7" And Target.Address <> "$M$5" And Target.Address <> "$M$6" Then Exit Sub
showcalendar
End Sub
or:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Union(Range("$D$7"), Range("$M$5"), Range("$M$6"))) Is Nothing Then showcalendar
End Sub