我曾经用于添加/删除行组(需求)的代码。我需要修改代码,以便如果组的第一行符合某些标准(即,要求不是我们想要考虑的那个),(1)我们不会计算它和(2),我们会隐藏组(当前和后续2行)。一切正常。
问题在于,现在我将这些更改合并,我在代码的另一部分出现错误,而对于我的生活,我无法弄清楚原因。我已经介入了这个并且非常沮丧。我正在寻求帮助,希望有人能看到我的错误(!)
我们计算分组中的开始和结束行数,并将这些计算存储在名为“Start”和“Finish”的数组中。我使用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
答案 0 :(得分:0)
Redim Start(0,50)
生成数组维0 to 0, 0 to 50
,即2d数组。
这意味着当您调用数组时,您需要为两个维度提供参数I.E:Start(0,i)
或Finish(0,i)
。调用Start(i)
会导致您提到的错误。
摆脱错误的最简单方法是将Redim行更改为
ReDim Start(50)
ReDim Finish(50)
这是我假设你首先要做的事情。
注意:根据您使用的格式,您最初可能需要Start(0 to 50)
和Finish(0 to 50)
。尺寸标注中的逗号表示另一个维度,而不是下限和上限之间的分隔。