变量数据类型可以在VBA中存储固定长度的字符串数据类型值吗?

时间:2019-02-19 11:23:56

标签: excel vba

按照official Microsoft.com documentation

  

Variant是一种特殊的数据类型,可以包含除固定长度的String数据之外的任何类型的数据。 (变量类型现在支持用户定义的类型。)变量也可以包含特殊值Empty,Error,Nothing和Null。您可以使用VarType函数或TypeName函数确定如何处理Variant中的数据。

我只需要了解为什么当变体无法存储固定长度的字符串时,以下代码为何有效?

Sub Test()

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

End Sub

2 个答案:

答案 0 :(得分:2)

y = x将固定长度的字符串转换为普通字符串,例如x = 10会将该数字转换为字符串。用y = x & "123456789012345"进行测试,您将发现它不再是固定长度。

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

这意味着x是固定长度的字符串,但是y的长度不再固定。如果没有将一种类型显式转换为另一种VBA,则在可能的情况下将其隐式转换为另一种类型(如果没有,则类型不匹配)。

例如,这意味着您可以将数字压入字符串而无需显式转换:

Dim str As String
str = 12345

会将数字12345转换为类似str = CStr(12345)的字符串。

当您将固定长度的字符串放入变量中时,会发生类似情况。它隐式转换为非固定长度的字符串。

答案 1 :(得分:1)

String * 10强制转换为Variant时,Variant成为字符串。在“监视”窗口中检查y

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