按照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
答案 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)