Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can variant data type store fixed length string data type values in VBA?

Tags:

excel

vba

As per the official Microsoft.com documentation:

A Variant is a special data type that can contain any kind of data except fixed-length String data. (Variant types now support user-defined types.) A Variant can also contain the special values Empty, Error, Nothing, and Null. You can determine how the data in a Variant is treated by using the VarType function or TypeName function.

I just need to understand why below code is working when variant cannot store fixed length strings?

Sub Test()

    Dim y As Variant
    Dim x As String * 10
    y = x
    MsgBox y

End Sub
like image 818
Shobhit Avatar asked Dec 29 '25 09:12

Shobhit


2 Answers

The y = x casts the fixed length string into a normal string like x = 10 would cast that number into a string. Test it with y = x & "123456789012345" and you will see it is not fixed length anymore.

Sub Test()    
    Dim y As Variant
    Dim x As String * 10
    y = x
    MsgBox y    

    'but this works too
    y = x & "123456789012345"
    MsgBox y    
End Sub

That means x is a fixed length string but y is not fixed in length anymore. If you do not explicitly convert one type into another VBA implicitly casts them into the other type if possible (if not you get a type mismatch).

That means for example that you can push a number into a string without explicitly converting it:

Dim str As String
str = 12345

will cast the number 12345 into a string like str = CStr(12345).

Similar happens when you push a fixed length string into a variant. It implicitly casts into a non fixed length string.

like image 153
Pᴇʜ Avatar answered Jan 01 '26 08:01

Pᴇʜ


When String * 10 is cast to Variant, the Variant becomes a string. Check the y in the Watch window:

Sub Test()

    Dim y As Variant
    Dim x As String * 10        
    x = "12345678900"
    y = x
    y = "12345678900"        
    Debug.Print y

End Sub

enter image description here

like image 21
Vityata Avatar answered Jan 01 '26 07:01

Vityata



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!