Вложенный IF в Visual Basic

#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 Вы, конечно, правы. Я передумал на полпути к написанию и не обновил сигнатуру функции.