0

我曾经用于添加/删除行组(要求)的代码。我需要修改代码,以便如果该组的第一行满足某些标准(即,该要求不是我们想要考虑的),(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

我更改的块如下(我添加的代码是我尝试隐藏行的最后一个块)。它先于前一个。我想知道我的更改如何影响上述(?!)

   If Cells(Row, 5).Value = "Requirement" Then
        Range(Cells(Row, 4), Cells(Row, 4)).Interior.ColorIndex = 40
        Rows(Row).Font.Bold = True
        Rows(Row).Font.Italic = False
        Rows(Row).Font.ColorIndex = 1 'Black
        If Cells(Row - 3, 4).Value = "" Then 'this is requirement #1
            Cells(Row, 4).Value = 1
            Else
            Cells(Row, 4).Value = Cells(Row - 3, 4).Value + 1
        End If

        p = Row
        q = p + 2
        Rows(p & ":" & q).Select
        If Cells(p, 19).Value = "4" Then
           Selection.EntireRow.Hidden = True
        Else
           Selection.EntireRow.Hidden = False
        End If
4

1 回答 1

0

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

这意味着当您调用数组时,您需要为两个维度 IE:Start(0,i)Finish(0,i). 调用Start(i)会导致你提到的错误。

摆脱错误的最简单方法是将 Redim 行更改为

ReDim Start(50)
ReDim Finish(50)

这就是我假设你首先要做的事情。

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

于 2012-12-06T15:01:58.003 回答