Sub Highlight_Diff()
Dim i, j As Integer
i = Starting_Row
Do While Cells(i, 3).Value <> ""
For j = 1 To 2 * Currencies
If Abs(Cells(i, 3 * (3 * Currencies + 1) + j).Value) > 100000 Then
Cells(i, 3 * (3 * Currencies + 1) + j).Interior.ColorIndex = 6
End If
Next j
Loop
End Sub
注意货币和Starting_Row只是常数整数。正如你所看到的,我想要做的就是循环代码行和高亮特别大的余额(对于上下文,这与由于汇率差异而产生的差异有关)。当我尝试运行这个简单的子程序时,我的Excel每次都会崩溃。我尝试在一个模块而不是工作簿中运行它,但这也没有用。它绝对不是因为有两行(只有几百行,每行只有4个单元格,因为这个特定作业的货币设置为2)。关于如何解决这个问题的任何想法? *注意:是的,我的for循环中确实有i = 1而不是j = 1,但是我修复了它并且它仍然崩溃,所以这似乎不是问题所在。
答案 0 :(得分:0)
您似乎在此处出现错误:i
始终在主循环开始时重置为1,因为您也在for
中使用它。
Do While Cells(i, 3).Value <> ""
For i = 1 To 2 * Currencies
If Abs(Cells(i, 3 * (3 * Currencies + 1) + j).Value) > 100000 Then
Cells(i, 3 * (3 * Currencies + 1) + j).Interior.ColorIndex = 6
End If
Next j
Loop
由于您使用了next j
,我相信您打算使用它,因此更改'i'
for
中的'j'
并查看其是否有效
如果它是您问题的根源,您可能正在目睹无限循环。
正如cyboashu指出的那样,您可能还需要使用Long
,因为vba整数最多只计算32767
,最多只计算-32768
答案 1 :(得分:0)
你的while循环总是看着相同的值。
由于i
不再是循环变量(在更正的代码中),因此您将使用以下while循环:
Do While Cells(Starting_Row, 3).Value <> ""
...
Loop
您没有更改Starting_Row的值,并且您没有更改单元格中的值。
你(1)从不执行Do-While代码或(2)你永远执行它。
我希望您忘记增加i
看看是否有效:
Sub Highlight_Diff()
Dim i, j As Integer ' better practice to make this type a Long
i = Starting_Row
Do While Cells(i, 3).Value <> ""
For j = 1 To 2 * Currencies
If Abs(Cells(i, 3 * (3 * Currencies + 1) + j).Value) > 100000 Then
Cells(i, 3 * (3 * Currencies + 1) + j).Interior.ColorIndex = 6
End If
Next j
i = i + 1 'moves you to the next row until empty cell is found
Loop
End Sub