VBA抛出'else without if'错误

Chi*_*mat 2 excel vba if-statement

我正在尝试以下代码,并反复抛出'else if if'和类似的错误.我只是无法弄清楚错误在哪里,因为每个if都被正确终止了.

这是代码:

Sub hra_macro()

Dim city As Boolean
Dim salary As Integer
Dim varHRA As Integer
Dim mimHRA As Integer
Dim maxHRA As Integer
Dim A As Integer
Dim B As Integer
Dim Rent As Integer

city = Range("b1").Value
salary = Range("b2").Value
Rent = Range("b3").Value

If city = True Then

varHRA = 0

    A = Rent - (salary / 10)
    B = salary * 0.5
    Do While varHRA < salary
        varHRA = varHRA + 1
            If (varHRA < A And varHRA < B) Then
            minHRA = varHRA
            End If
            If (A < varHRA And A < B) Then
            minHRA = A
            End If
            If (B < varHRA And B < A) Then
            minHRA = B
            End If
            If minHRA > maxHRA Then
            maxHRA = minHRA
            End If
    Exit Do
Else '<<<<<<<<<<<<<<<<<<<< PROBLEM AREA

varHRA = 0

    A = Rent - (salary / 10)
    B = salary * 0.4
    Do While varHRA < salary
        varHRA = varHRA + 1
        If (varHRA < A And varHRA < B) Then
        minHRA = varHRA
        End If
        If (A < varHRA And A < B) Then
        minHRA = A
        End If
        If (B < varHRA And B < A) Then
        minHRA = B
        End If
    If minHRA > maxHRA Then
    maxHRA = minHRA
    End If
    Exit Do
End If

Range("b4").Value = maxHRA

End Sub
Run Code Online (Sandbox Code Playgroud)

Chr*_*cht 8

If看看行不行给我的第一眼,但我注意到,这两个Dos的缺失Loop.

它应该如下所示:

Do While varHRA < salary
    'Do Stuff
Loop
Run Code Online (Sandbox Code Playgroud)

Exit Do用于在后面的条件While为真之前退出循环,但是你总是需要Loop关键字.

如果问题仍然存在,请发布您收到的确切错误消息.


编辑:

我只是尝试在MS Access中的VBA中重现您的问题(我没有在此机器上安装Excel,只有Access):

Public Function Test()

    If 1 = 0 Then

        Do While 1 = 0

            Stop

        Exit Do

    Else

        Stop

    End If

End Function
Run Code Online (Sandbox Code Playgroud)

这段简单的代码给了我完全相同的错误信息:

编译错误:没有If的其他错误

当我替换为Exit Doa时Loop,错误消失并且代码编译.

因此,您应该在代码中替换Exit Doby Loop.

  • @Chinmay Kamat:即使您的错误消息没有说明"循环",这似乎也会导致错误.再次阅读我的回答,我添加了一个例子. (2认同)