Let's try this instead:
Original code---
IF VARTYPE(This.Parent) = 'O'
This.Parent.Error(nError, cMethod, nLine)
ELSE
DODEFAULT(nError, cMethod, nLine)
ENDIF
New code---
IF VARTYPE(This.Parent) <> 'O'
DODEFAULT(nError, cMethod, nLine)
ELSE
This.Parent.Error(nError, cMethod, nLine)
ENDIF
This.parent results in nothing, not even undefined; therefore, it is safe to say it will not result in an "O" as well. Hence, if VARTYPE(This.Parent) is not equal to "O" then perform the default error routine; otherwise perform the one from the Parent.
After all, THIS.Parent will NOT result in "C", "N", "D"... or any other data type other than "O".
P.S. Beth, I think you probably understood my prior post anyway, but required some further clarification.