每当我运行这个简单的VBA子

时间:2018-02-01 22:12:20

标签: excel vba excel-vba

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,但是我修复了它并且它仍然崩溃,所以这似乎不是问题所在。

2 个答案:

答案 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