每当我运行这个简单的VBA sub时,我的Excel就会崩溃

每当我运行这个简单的VBA sub时,我的Excel就会崩溃,vba,excel,Vba,Excel,请注意,货币和起始行仅为常量整数。正如你们所看到的,我所要做的就是循环遍历代码行,特别是上下文中的大型余额,这与由于汇率差异而产生的差异有关。当我试着运行这个简单的sub时,我的Excel崩溃了。。。每一次。我试着在模块中运行它,而不是在工作簿中运行,但也不起作用。这肯定不是因为有两个多行,只有几百行,每行只有4个单元格,因为对于这个特定的作业,货币设置为2。你知道我该怎么解决这个问题吗? *注意:是的,起初我的for循环中有I=1而不是j=1,但是我修复了这个问题,它仍然崩溃,所以这似乎不是问

请注意,货币和起始行仅为常量整数。正如你们所看到的,我所要做的就是循环遍历代码行,特别是上下文中的大型余额,这与由于汇率差异而产生的差异有关。当我试着运行这个简单的sub时,我的Excel崩溃了。。。每一次。我试着在模块中运行它,而不是在工作簿中运行,但也不起作用。这肯定不是因为有两个多行,只有几百行,每行只有4个单元格,因为对于这个特定的作业,货币设置为2。你知道我该怎么解决这个问题吗?
*注意:是的,起初我的for循环中有I=1而不是j=1,但是我修复了这个问题,它仍然崩溃,所以这似乎不是问题所在

您在这里似乎有一个错误:我总是在主循环开始时重置为1,因为您也在for中使用它

既然您使用了next j,我相信您是有意使用它的,所以将for中的“I”改为“j”,看看它是否有效

如果这是你问题的根源,你可能正在目睹一个无限循环


正如cyboashu所指出的,您可能还需要使用一个很长的vba整数,因为vba整数最多只能计数32767,最多只能计数-32768,而while循环总是在寻找相同的值

由于i不再是更正代码中的循环变量,因此您将保留以下while循环:

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

在不同的循环中使用i两次。这个问题对后代没有用处……首先,将i和j设置为longinger,它只能容纳i和Next使用的+32767j@RobinMackenzie那不太好。
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
Do While Cells(Starting_Row, 3).Value <> ""
   ...
Loop
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