在声明 String 和 Variant 类型的数组时,我无法理解何时需要/不需要括号。
Dim str
str = "The quick fox"
Dim Pieces As Variant
Pieces = Split(str)
MsgBox(Pieces(1))
Run Code Online (Sandbox Code Playgroud)
输出:快速
Dim str
str = "The quick fox"
Dim Pieces() As Variant
Pieces = Split(str)
MsgBox(Pieces(1))
Run Code Online (Sandbox Code Playgroud)
“类型不匹配”
Dim str
str = "The quick fox"
Dim Pieces() As String
Pieces = Split(str)
MsgBox(Pieces(1))
Run Code Online (Sandbox Code Playgroud)
输出:快速
Dim str
str = "The quick fox"
Dim Pieces As String
Pieces = Split(str)
MsgBox(Pieces(1))
Run Code Online (Sandbox Code Playgroud)
不会编译“预期数组”
我能理解 4. 不工作。但我无法理解变体版本(1.和2.)不以相同方式工作的原因以及动态字符串数组(3.)在不使用ReDim的情况下如何工作?
根据Split 函数的手册,它返回一个从零开始的一维数组,其中包含指定数量的子字符串。
这意味着该Split()函数返回一个与 相同的字符串数组Dim Pieces() As String。但是,如果您声明Dim Pieces() As Variant这意味着Pieces被声明为变体数组,并且您不能将字符串数组放入变体数组中。
如果您声明Dim Pieces As Variant,则该变量Pieces可以Variant包含Variant任何类型。因此它还可以包含一个数组(或任何其他类型的值或对象)。
所以这里的区别是:
Dim Pieces() As Variant这里变量被定义为一个数组VariantsDim Pieces As Variant这里变量被定义为任何东西。Dim Pieces() As String它的返回值类型Split()不是数组,Variants因此与第一个数组不兼容。
最后是以下内容
Dim Pieces() As String
Pieces = Split(str)
Run Code Online (Sandbox Code Playgroud)
无需使用即可工作ReDim,因为Dim Pieces() As String将变量定义为任意大小的数组。Split()返回一个数组,因此我们可以将其放入变量中Pieces而不会出现任何问题。