vba,为什么无维数组与 Split() 一起使用

Gen*_*ene 5 arrays vba

我可以使用带有 Split() 函数的无尺寸字符串数组来从字符串中读取字段,但显然,必须对字符串数组进行尺寸标注才能在循环中使用它。

为什么会这样?还有其他情况下数组不需要标注尺寸吗?

Dim field() As String
field = Split(data_line, "~")

Dim pref_line(10) As String
Input #1, pref_line(i)
Run Code Online (Sandbox Code Playgroud)

Sid*_*out 3

但显然,必须确定字符串数组的尺寸才能在循环中使用它。

当使用带有 Split() 函数的无尺寸字符串数组时,该数组会自动确定尺寸并为其分配值。您也可以在循环中使用它For i = LBound(field) to UBound(field)

Option Explicit

Sub Sample()
    Dim field() As String
    Dim data_line As String

    data_line = "aaa~bbb"

    field = Split(data_line, "~")

    Debug.Print field(0)
End Sub
Run Code Online (Sandbox Code Playgroud)

是否还有其他情况不需要对数组进行标注?

是的。当您不知道需要将多少项添加到数组中时,您可以声明无维数组并用Redim Preserve它来添加值。例如

Option Explicit

Sub Sample()
    Dim field() As Long
    Dim n As Long, i As Long

    ReDim Preserve field(n)

    For i = 1 To 100
        field(n) = i
        n = n + 1
        ReDim Preserve field(n)
    Next i
End Sub
Run Code Online (Sandbox Code Playgroud)