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