If you Dim defined_name as a Variant, it will be able to hold anything you
throw at it.
The .Name.Name syntax is typically used to retrieve the name associated with
a Range. Not when working through the list of defined names.
The #ref on a name indicates that the cell that it referred to has been
removed. This is either by deleting the column or row that it was in, or by
Cut/Paste of another cell over it (n.b. not Copy/Paste).
There is no garbage collection on the list. The #ref items will remain
until you remove them.