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

标签 vba excel

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

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

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

所以最好的员工会有 0 个缺失的工作表。最糟糕的是会错过他们所有人。

最佳答案

问题在于 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

关于vba - 如何在 VBA 中动态调整数组的大小?我不断收到下标和索引问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45497415/

相关文章:

excel - 函数参数 VBA

vba - 将 protected 工作表宏应用于工作簿中的所有工作表

python - 如何在python中将选定的数据从一列移动到另一列

c# - 如何在 C# Windows 应用程序中将数据表导出到 Excel

excel - 如何使用 VBA 将我的图片放置在现有 powerpoint 幻灯片的幻灯片中心?

excel - 在vba中搜索多个字符串

VBA:使用 Windows 身份验证登录

VBA 绘制边框

java - 使用 java jxl 在现有工作簿中添加新工作表

vba - 如果任何工作表中存在#N/A,则需要阻止用户运行宏