San*_*fly 2 excel vba excel-vba
我试图向动态数组添加一个值,但是这会继续产生运行时错误.我找到了一些不同的消息来源说这应该是答案,所以我无法弄清楚我做错了什么......
Sub addtoarray()
Dim catSheets() As String
ReDim Preserve catSheets(UBound(catSheets) + 1)
catSheets(UBound(catSheets)) = "Chemicals"
End Sub
Run Code Online (Sandbox Code Playgroud)
创建catSheets()数组时,它是无量纲的.因此,您无法使用UBound()确定数组的上边界.
如果你想指定一个数组大小,你当然可以Dim ()用a 跟进a ReDim,但是在你给它一些之前你将无法查询数组维度.
所以你有几个选择.首先,您可以Dim ()立即跟进ReDim,为您的阵列提供初始大小:
Dim catSheets() As String
ReDim catSheets(0) As String
...
ReDim Preserve catSheets(...) As String
Run Code Online (Sandbox Code Playgroud)
或者,您可以ReDim从一开始就使用指定初始大小,并且仍然具有以后的能力ReDim:
ReDim catSheets(0) As String
...
ReDim Preserve catSheets(...) As String
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用该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
Run Code Online (Sandbox Code Playgroud)