首页 > 解决方案 > VBA数组 - 下标超出范围

问题描述

我希望创建一个 5 行 2 列的 VBA 数组

varData = [{0, 0; 0, 0; 0, 0; 0, 0; 0, 0}]

并根据情况更改值

select Case sth
                Case "1"
                    varData(0, 0) = varData(0, 0) + Cells(I, 1).Value
                Case "2"
                    varData(0, 1) = varData(0, 1) + Cells(I, 1).Value
                Case "3"
                    varData(0, 2) = varData(0, 2) + Cells(I, 1).Value
                Case "4"
                    varData(0, 3) = varData(0, 3) + Cells(I, 1).Value
                Case "5"
                    varData(0, 4) = varData(0, 4) + Cells(I, 1).Value
                Case Else
                    '?
            End Select

我在这一行遇到错误:

varData(0, 2) = varData(0, 2) + Cells(I, 1).Value

说“下标超出范围”

我也尝试将数组更改为

varData = [{0, 0, 0, 0, 0; 0, 0, 0, 0, 0}]

请帮助我了解我是如何超出范围的

标签: arraysvba

解决方案


您正在使用 Evaluate 的简写,因此您正在通过与工作表相同的机制加载数组,因此基数是 1 而不是 0。

在此处输入图像描述

所以你想改变引用如下:

       select Case sth
            Case "1"
                varData(1, 1) = varData(0, 0) + Cells(I, 1).Value
            Case "2"
                varData(1, 2) = varData(0, 1) + Cells(I, 1).Value
            Case "3"
                varData(1, 3) = varData(0, 2) + Cells(I, 1).Value
            Case "4"
                varData(1, 4) = varData(0, 3) + Cells(I, 1).Value
            Case "5"
                varData(1, 5) = varData(0, 4) + Cells(I, 1).Value
            Case Else
                '?
        End Select

推荐阅读