Vba 运行时错误';9';:使用动态数组时下标超出范围
我试图向动态数组添加一个值,但却不断遇到运行时错误。我发现一些不同的消息来源说这应该是答案,所以我无法找出我做错了什么Vba 运行时错误';9';:使用动态数组时下标超出范围,vba,excel,Vba,Excel,我试图向动态数组添加一个值,但却不断遇到运行时错误。我发现一些不同的消息来源说这应该是答案,所以我无法找出我做错了什么 Sub addtoarray() Dim catSheets() As String ReDim Preserve catSheets(UBound(catSheets) + 1) catSheets(UBound(catSheets)) = "Chemicals" End Sub 创建catSheets()阵列时,它是无量纲的。因此,不能使用U
Sub addtoarray()
Dim catSheets() As String
ReDim Preserve catSheets(UBound(catSheets) + 1)
catSheets(UBound(catSheets)) = "Chemicals"
End Sub
创建
catSheets()
阵列时,它是无量纲的。因此,不能使用UBound()
确定数组的上边界
如果要指定数组大小,当然可以使用ReDim
跟踪Dim()
,但在指定数组大小之前,您将无法查询数组维度
所以你有几个选择。首先,您可以在Dim()
之后立即执行ReDim
,以确定阵列的初始大小:
Dim catSheets() As String
ReDim catSheets(0) As String
...
ReDim Preserve catSheets(...) As String
或者,您可以从一开始就使用ReDim
来分配初始大小,以后仍然可以使用ReDim
:
ReDim catSheets(0) As String
...
ReDim Preserve catSheets(...) As String
或者,您可以使用Array()
函数,并将其存储为变量
。通过这种方式,您可以查询UBound()
。例如:
Dim catSheets As Variant
catSheets = Array()
Debug.Print UBound(catSheets) ' => -1
ReDim Preserve catSheets(UBound(catSheets) + 1)
catSheets(UBound(catSheets)) = "Chemicals" ' Works fine
如果您想保留代码的使用方式,可以使用
Variant
Sub addtoarray()
Dim catSheets As Variant
catSheets = Array() ' Initially Empty (0 to -1)
Redim Preserve catSheets(Ubound(catSheets) + 1) ' Now it's 0 to 0
catSheets(Ubound(catSheets)) = "Chemicals" ' index here is 0
End Sub
您不能
ReDim
aVariant
。首先需要使用Array()
函数来创建数组。