VBA выдает ошибку «иначе без if» - PullRequest
2 голосов
/ 02 октября 2011

Я пробовал следующий код, и он неоднократно выдавал «else без 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

Ответы [ 2 ]

8 голосов
/ 02 октября 2011

На первый взгляд, If s выглядят хорошо, но я заметил, что оба Do s пропускают Loop.

Это должно выглядеть так:

Do While varHRA < salary
    'Do Stuff
Loop

Exit Do используется для выхода из цикла до того, как условие за While будет истинным, но вам всегда нужно ключевое слово Loop.

Если проблема не устранена, опубликуйте точное сообщение об ошибке.


EDIT:

Я только что попытался воспроизвести вашу проблему в VBA в MS Access (на этом компьютере не установлен Excel, только Access):

Public Function Test()

    If 1 = 0 Then

        Do While 1 = 0

            Stop

        Exit Do

    Else

        Stop

    End If

End Function

Этот простой фрагмент кода выдает мне то же самое сообщение об ошибке, которое вы получили:

Ошибка компиляции: иначе без If

Когда я заменяю Exit Do на Loop, ошибка исчезает и код компилируется.

Итак, вы должны заменить Exit Do на Loop в вашем коде.

2 голосов
/ 02 октября 2011

Похоже, вы используете «Выход из Do» вместо «Loop».«Exit Do» выйдет из цикла Do, именно так вы хотите себя вести?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...