Use subtype Decimal of type Variant.
Try this:
Code:
Dim d As Variant
Dim x As Variant
Dim y As Variant
Dim z As Variant
d = CDec(1)
d = d * 123456789012345#
x = d * d '-- * return a Decimal value
Debug.Print TypeName(x), x '-- Decimal 15241578753238669120562399025
y = d ^ 2 '-- ^ return a Double value with maximum of 15 significant digits
Debug.Print TypeName(y), y '-- Double 1.52415787532387E+28
z = CDec(d ^ 2) '-- Convert a Double value to Decimal
'-- but still has maximum of 15 significant digits
Debug.Print TypeName(z), z '-- Decimal 15241578753238700000000000000