我在程序中遇到for循环问题。现在我有两个填充了任意数字的数组。这两个数组大小相同。基本上我希望用户指定他们想要在阵列上完成什么样的操作,然后我将执行它们(假设数组的尺寸相同)。下面是我尝试使用原始两个数组之间的差异填充答案数组的代码:
If (LCase(diffOrPercent = "difference")) Then
For iRow = 1 To totalRow
For iCol = 1 To totalCol
answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
Next iCol
Next iRow
End If
我遇到的问题是当我尝试打印出来时,answerArray完全是空白的。有谁知道发生了什么事?
注意:如果for循环从0变为end - 1,当我输入以下内容时会发生同样的错误:
answerArray(iRow, iCol) = s2Array(iRow, iCol).Value2 - s3Array(iRow, iCol).Value2
当我把Value而不是Value2时。
谢谢,
Jesse Smothermon
答案 0 :(得分:2)
我想通了,if语句写得不正确,所以代码的操作部分甚至没有被命中。我搞砸了LCase上的括号,所以校正低于
If (LCase(diffOrPercent) = "difference") Then
For iRow = 1 To totalRow
For iCol = 1 To totalCol
answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
Next iCol
Next iRow
End If
这使得变量diffOrPercent将全部小写而不是......好吧我认为当我的原始if语句被实现时没有任何事情发生,因为if语句中的任何内容都没有被触发。对不起,我完全浪费了每个人的时间,但我非常感谢所有的快速回复
答案 1 :(得分:0)
跳出来的第一件事是假设数组的起始索引为1.除非你明确声明某处(在声明数组或使用Option Base 1
时),否则数组中的第一项索引为0.
如果在运行时之前不知道数组边界,使用LBound
和UBound
函数以编程方式确定边界通常会更安全:
If (LCase(diffOrPercent) = "difference") Then
For iRow = LBound(s2Array, 1) To UBound(s2Array, 1)
For iCol = LBound(s2Array, 2) To UBound(s2Array, 2)
answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
Next iCol
Next iRow
End If
请注意,我在此假设s2Array
,s3Array
和answerArray
都具有相同的尺寸。因此,我只检查s2Array
。