Redim Preserve内部的UBound抛出“下标超出范围”

时间:2019-11-08 13:21:01

标签: arrays vba ms-access

我想使用包含任意数量的字符串的动态数组。该数组由if ... then逻辑而不是循环填充。我不断收到Subscript out of range错误:

Dim Files() As String

If True Then
    ReDim Preserve Files(UBound(Files) + 1) ' Throws "Subscript out of range" error
    Files(UBound(Files)) = "foo.pdf"
End If

If True Then
    ReDim Preserve Files(UBound(Files) + 1)
    Files(UBound(Files)) = "bar.txt"
End If

If True Then
    ReDim Preserve Files(UBound(Files) + 1)
    Files(UBound(Files)) = "baz.jpg"
End If

我有一个这样声明的函数:

Function SendFiles(Files() As String)

我想摆脱此错误,尽可能不使用变体。我可以重写代码,但不能使用循环。

2 个答案:

答案 0 :(得分:2)

您的数组没有在开始时进行初始化,因此您无法Redim Preserve进行未初始化的数组。

如果您希望字符串数组容纳可变数量的项目,可能为零,则可以使用Split将其初始化为零长度的数组:

Files = Split(vbNullString)

答案 1 :(得分:1)

您还可以分配足够大的数组,然后将其大小调整为使用的大小。这样,您只有1个调整大小。像这样:

<LinearLayout xmlns:materialdesign="http://schemas.android.com/apk/res-auto"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:orientation="horizontal">

                    <com.gc.materialdesign.views.ButtonRectangle
                        android:id="@+id/button"
                        android:layout_width="104dp"
                        android:layout_height="match_parent"
                        android:background="#1E88E5"
                        android:text="@string/button"/>