我试图向动态数组添加一个值,但是不断出现运行时错误。我找到了一些不同的消息来源说这应该是答案,所以我无法弄清楚我做错了什么......
Sub addtoarray()
Dim catSheets() As String
ReDim Preserve catSheets(UBound(catSheets) + 1)
catSheets(UBound(catSheets)) = "Chemicals"
End Sub
答案 0 :(得分:7)
创建catSheets()
数组时,它是无量纲的。因此,您无法使用UBound()
来确定阵列的上边界。
如果您想要指定数组大小,您当然可以使用Dim ()
跟进ReDim
,但在您之后,您将无法查询数组维度。给了它一些。
所以你有几个选择。首先,您可以立即跟踪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()
函数并将其存储为Variant
。通过这种方式,可以查询UBound()
。例如:
Dim catSheets As Variant
catSheets = Array()
Debug.Print UBound(catSheets) ' => -1
ReDim Preserve catSheets(UBound(catSheets) + 1)
catSheets(UBound(catSheets)) = "Chemicals" ' Works fine
答案 1 :(得分:0)
如果您想保留使用代码的方式,可以使用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