Excel 填充数组一旦工作,不再填充(下标超出范围)

Excel 填充数组一旦工作,不再填充(下标超出范围),excel,vba,Excel,Vba,我曾经使用的代码用于添加/删除行组(需求)。我需要修改代码,以便如果组的第一行满足某些标准(即,要求不是我们想要考虑的),(1)我们不会计算它,(2)我们会隐藏组(当前和后续的2行)。这一切都很好 问题是,现在我合并了这些更改,我在代码的另一部分中遇到了一个错误,我一生都不知道为什么。我经历了这一切,感到非常沮丧。我正在寻求帮助,希望有人能看到我的错误(!) 我们计算分组中的开始行号和结束行号,并将这些计算存储在名为“开始”和“结束”的数组中。我使用ReDim语句初始化数组,因为我认为这可能是问

我曾经使用的代码用于添加/删除行组(需求)。我需要修改代码,以便如果组的第一行满足某些标准(即,要求不是我们想要考虑的),(1)我们不会计算它,(2)我们会隐藏组(当前和后续的2行)。这一切都很好

问题是,现在我合并了这些更改,我在代码的另一部分中遇到了一个错误,我一生都不知道为什么。我经历了这一切,感到非常沮丧。我正在寻求帮助,希望有人能看到我的错误(!)

我们计算分组中的开始行号和结束行号,并将这些计算存储在名为“开始”和“结束”的数组中。我使用ReDim语句初始化数组,因为我认为这可能是问题的一部分,但不是

如果您能了解我的“下标超出范围”的原因,我们将不胜感激。我已经跟踪了逻辑,调查了这个错误,并了解了VBA数组的语法/用法。我不知道还能做什么。提前谢谢。以下是相关线路:

Sub Button1_Click()
    Cells.Select
    Selection.ClearOutline
    If Cells.EntireRow.Hidden Then Cells.EntireRow.Hidden = False
    Dim Start() As Integer
    Dim Finish() As Integer
    Dim p As Integer, q As Integer
    ReDim Start(0, 50)
    ReDim Finish(0, 50)
以下内容嵌入到循环遍历电子表格中所有行的逻辑中:

i = 1

    For Row = 4 To Cells(1, 6).Value - 1
        If Begin Then
            If Cells(Row, 3).Interior.ColorIndex = 44 Then
                Start(i) = Row + 1
                j = Cells(Row, 2).Value
                Begin = False
            End If
        Else
            If Cells(Row, 2).Value = j + 1 Or Cells(Row, 2).Interior.ColorIndex = 37 Then
                Finish(i) = Row - 1
                Begin = True
                i = i + 1
                Row = Row - 1
            End If
        End If
    Next
我更改的块如下所示(我添加的代码是我试图隐藏行的最后一个块)。它先于前一个。我想知道我的改变会如何影响上述(?)

Redim Start(0,50)
使数组维度
0到0,0到50
即二维数组

这意味着当您调用数组时,您需要为两个维度提供参数,即:
Start(0,I)
Finish(0,I)
。调用
Start(i)
将导致您提到的错误

消除此错误的最简单方法是将您的重拨线路更改为

ReDim Start(50)
ReDim Finish(50)
我猜你一开始就是想这么做的


注意:根据您使用的格式,您最初可能打算执行
Start(0到50)
Finish(0到50)
。标注中的逗号表示另一个标注,而不是上下限之间的分隔。

谢谢!好吧,这样就消除了那个错误。所以我很兴奋我终于完成了。当我的代码完成执行时,我发现我的“隐藏行”代码没有完成,如果这有意义的话。因此,当代码由于上述错误而停止时,我查看了电子表格的状态,一切都如我所愿,特定的行被隐藏。现在,代码完成后,行变为“未隐藏”。Uggh。在再次打扰大家之前,我会看看我能做些什么…好吧,如果你决定“打扰我们”。。。这可能有助于使您使用的代码井然有序。正如您所解释的,看起来您可能在尝试使用数组后填充了该数组。。。并且从不实际使用您填充的数组。我这么说是因为第3段在第2段之前。此外,除非它的长度太长,否则至少向我们展示如何确定行是有益的。当您单步抛出代码时,代码是否会
单元格(第5行)。value=“Requirement”
发生了什么?如前所述,您可能只检查了1行,因为行检查逻辑没有循环。那么,我决定再次打扰您。因此,当代码因索引错误而停止时,hid和un hid行的逻辑确实起作用(我查看了电子表格-行被隐藏)。计算这些指数是为了确定每个分组的开始和结束,并建立这些公式来计算每个分组的需求。这些公式也能准确地工作。当我向countif公式添加另一个条件时,它使公式崩溃(请参阅我的另一个问题…)。现在我尝试将隐藏/取消隐藏逻辑移到代码模块的末尾。还是。。。不行。谢谢你的反馈。我真的很感激这些有用的提示。我帮不了你,我不知道什么不起作用。如果没有看到代码,几乎不可能知道问题出在哪里。我指出了你列出的代码中的问题,至于你没有列出的代码,我只能胡乱猜测。
ReDim Start(50)
ReDim Finish(50)