THIS ONLY APPLIES TO VB6 !!!! Variants aren't supported in DotNET.
Well there certainly alot of disadvantages to variants especially if misused. There are some advantages to using variants in a limited fashion. Like most thing there are many different ways to do things and I am not suggesting that these are the only way. I am just trying to point out some use variants have and there unique capabilities.
You also have to ask your self why Microsoft developers spent so much time and effort to develop variant data types for VB6. So at the time there was thought that they were going to be useful. (At least until DotNet came around)
The basic advantage to variants is that they can accept any type of data. This is useful especially if you do not know the type of data you will be dealing with until runtime or you expect the type of data to change. (Collection use vaiants for example)
==================================================
An undefined variant is assigned a special value "Empty" Empty evaulates to a numeric zero or an empty string("") if its unassigned.
Empty can be useful in error checking and detecting unassigned variables.
A variant can also hold an object reference.
This can be handy if you write a (single) sub or function that uses a variant to pass different control types to process.(I suppose you can write an overloaded function instead to handle each specific control type)
Finally a variant can be Null, which can be handy in preprocessing string and serial data inputs.
If IsNull(Name) Then
MsgBox "The name is not valid"
Else
MsgBox "The name is " & Name
End If