#vba #nested-if
#vba #вложенный-if
Вопрос:
Я хочу создать программу, которая «Кредит будет принят, если зарабатывает более 30 тыс. И работает на работе более 2 лет или работает более 5 лет. и возраст от 30 до 50 лет.
Но не работает
If sngSalary > 30000 Then
If sngAge < 50 Then
If sngYear > 5 Then
lblMessage.Text = "Application qualifies"
Else
lblMessage.Text = "Application does not qualifies"
End If
Else
If sngYear >= 2 Then
lblMessage.Text = "Application qualifies"
Else
lblMessage.Text = "Application does not qualifies"
End If
End If
Else
If sngAge > 30 Then
If sngYear > 5 Then
lblMessage.Text = "Application qualifies"
Else
lblMessage.Text = "Application does not qualifies"
End If
Else
If sngYear >= 2 Then
lblMessage.Text = "Application qualifies"
Else
lblMessage.Text = "Application does not qualifies"
End If
End If
End If
Ответ №1:
Просто закодируйте его почти точно так, как вы сказали в своем описании:
Private Sub Test()
If (sngSalary > 30000 And sngYear > 2) Or (sngYear > 5 And sngAge >= 30 And sngAge <= 50) Then
lblMessage.Text = "Application qualifies"
Else
lblMessage.Text = "Application does not qualifies"
End If
End Sub
Ответ №2:
Довольно часто сложную логику можно упростить, переместив код в функцию и изменив логику так, чтобы функция оставалась ранней, если не выполняется критерий. При написании такой функции я стараюсь, чтобы логика сводилась к простым элементам да / нет.
Выражение требуемых условий с помощью OP довольно запутано, поэтому приведенный ниже код может быть неправильным, но он демонстрирует принцип.
Option Explicit
Public Function IsEligible(ByVal ipSalary As Long, ByVal ipAge As Long, ByVal ipEmploymentTime As Long) As String
IsEligible = "Application does not qualify"
If ipEmployment < 2 Then Exit Function
If ipSalary < 30000
If ipEmploymentTime < 5 Then Exit Function
If ipAge < 30 Then Exit Function
If ipAge > 50 Then Exit Function
End If
IsEligible = "Application qualifies"
End Function
Комментарии:
1. Мне нравится эта идея, и я часто использую ее в своем коде. Одна мысль: я бы ожидал, что функция вернет логическое значение на основе его имени.
2. @BrianMStafford Вы, конечно, правы. Я передумал на полпути к написанию и не обновил сигнатуру функции.