On the other hand you could skip UDT's and go with 2 arrays, vNames and vValues say, that would be synchronized by same index, but you still need to specify what type for values array and need a separate list of array names and values for each type value you want to track.
ie IntegerVarNames$() and Integers() as Integer, DoubleVarNames$() and Doubles() as Double, ...