分配给数组

Jim*_*Jim 2 excel vba

在声明 String 和 Variant 类型的数组时,我无法理解何时需要/不需要括号。

  1. 这按预期工作(将没有括号的 Pieces 声明为 Variant):
Dim str
str = "The quick fox"
Dim Pieces As Variant
Pieces = Split(str)
MsgBox(Pieces(1)) 
Run Code Online (Sandbox Code Playgroud)

输出:快速

  1. 这不起作用(将带有括号的 Pieces 声明为 Variant):
Dim str
str = "The quick fox"
Dim Pieces() As Variant
Pieces = Split(str)
MsgBox(Pieces(1)) 
Run Code Online (Sandbox Code Playgroud)

“类型不匹配”

  1. 这是可行的(将带有括号的 Pieces 声明为 String):
Dim str
str = "The quick fox"
Dim Pieces() As String
Pieces = Split(str)
MsgBox(Pieces(1)) 
Run Code Online (Sandbox Code Playgroud)

输出:快速

  1. 这不起作用(将没有括号的 Pieces 声明为 String):
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的情况下如何工作?

Pᴇʜ*_*Pᴇʜ 5

根据Split 函数的手册,它返回一个从零开始的一维数组,其中包含指定数量的子字符串。

这意味着该Split()函数返回一个与 相同的字符串数组Dim Pieces() As String。但是,如果您声明Dim Pieces() As Variant这意味着Pieces被声明为变体数组,并且您不能将字符串数组放入变体数组中。

如果您声明Dim Pieces As Variant,则该变量Pieces可以Variant包含Variant任何类型。因此它还可以包含一个数组(或任何其他类型的值或对象)。

所以这里的区别是:

  1. Dim Pieces() As Variant这里变量被定义为一个数组Variants
  2. Dim 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而不会出现任何问题。