I tested it, and it works, but please explain to me why it works. Target.Name returns the range, for example, Range("C7:C12").Name returns: =Sheet1!$C$7:$C$12, so how does feeding it to ObjPtr() test if it's a Named Range?
Function test4Name(Target As Range) As Boolean
On Error Resume Next
[COLOR=Red]MsgBox TypeName(Target.Name)[/COLOR]
test4Name = ObjPtr(Target.Name)
End Function
Function test4Name(target As Range) As Boolean
On Error Resume Next
test4Name = Len(target.Name.Name)
End Function