如何在VBA中动态调整数组大小?我不断遇到下标和索引问题

sof*_*fun 1 excel vba

Dim codesArray() As Variant
  ...
If WorksheetExists(workSheetName) Then
  ...
Else
     ReDim Preserve codesArray(UBound(codesArray) + 1) ' Error subscript 
     codesArray(UBound(codesArray)) = cell.Value
End If
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会出现索引超出范围错误。

基本上每次找不到工作表名称时,我都想将其添加到数组中,然后最终让用户知道丢失的工作表的名称。

所以最好的员工丢失的工作表应该是 0。最糟糕的情况就是失去他们所有人。

Joh*_*man 5

问题在于UBound(codesArray). 您无法调用UBound()尚未确定尺寸的数组。

您可以使用错误处理来解决这种情况。抽象为一个可能有用的子:

Sub ExtendArray(A As Variant, Optional NewPlaces = 1, Optional LBase = 0)
    On Error GoTo err_handler
    ReDim Preserve A(LBound(A) To UBound(A) + NewPlaces)
    Exit Sub
err_handler:
    ReDim A(LBase To LBase + NewPlaces - 1)
End Sub
Run Code Online (Sandbox Code Playgroud)