vba, если else-оператор else не выдаёт вывод, я хочу, чтобы он был - PullRequest
0 голосов
/ 19 марта 2019

В VBA я использую оператор if, elseif, else, но он не дает вывод, который я на самом деле хочу.

Sub oefening1()
Dim jaarinkomen As Long
jaarinkomen = InputBox("Wat is uw jaarinkomen?")
If jaarinkomen < 18300 Then
    MsgBox ("U zit in klasse minimumloon of lager")
ElseIf 18300 <= jaarinkomen < 36500 Then
    MsgBox ("U zit in klasse benedenmodaal")
ElseIf 36500 <= jaarinkomen < 73000 Then
    MsgBox ("U zit in klasse bovenmodaal")
ElseIf 73000 <= jaarinkomen < 1000000 Then
    MsgBox ("U zit in klasse boven dubbelmodaal")
Else
    MsgBox ("U zit in klasse miljonair")
End If
End Sub

Проблема в том, что независимо от того, какое число я набираю, оно больше 18300, оно всегда выдает первое elseg msgbox в качестве вывода.Что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 19 марта 2019

Ваш код может быть исправлен с правильным синтаксисом и использованием оператора And, но вариант выбора выглядит более подходящим.

Sub oefening1()

    Dim jaarinkomen As Long

    jaarinkomen = InputBox("Wat is uw jaarinkomen?")

    Select Case jaarinkomen 
      Case is < 18300
        MsgBox ("U zit in klasse minimumloon of lager")
      Case is < 36500
        MsgBox ("U zit in klasse benedenmodaal")
      Case is < 73000 
        MsgBox ("U zit in klasse bovenmodaal")
      Case is < 1000000 
        MsgBox ("U zit in klasse boven dubbelmodaal")
      Case Else 
        MsgBox ("U zit in klasse miljonair")
    End Select

End Sub

Независимо от того, используете ли вы вариант выбора или If ElseIf End If, тамнет причин продолжать проверять условия, которые были переданы.Если jaarinkomen не меньше 18300 в первом условии, вам не нужно проверять, больше ли оно 18300 во втором условии.

0 голосов
/ 19 марта 2019

Это исправит и упростит ваш код, потому что вам на самом деле не нужно условие нижняя граница для каждого ElseIf:

Sub oefening1()
    Dim jaarinkomen As Long
    jaarinkomen = InputBox("Wat is uw jaarinkomen?")
    If jaarinkomen < 18300 Then
        MsgBox ("U zit in klasse minimumloon of lager")
    ElseIf jaarinkomen < 36500 Then
        MsgBox ("U zit in klasse benedenmodaal")
    ElseIf jaarinkomen < 73000 Then
        MsgBox ("U zit in klasse bovenmodaal")
    ElseIf jaarinkomen < 1000000 Then
        MsgBox ("U zit in klasse boven dubbelmodaal")
    Else
        MsgBox ("U zit in klasse miljonair")
    End If
End Sub
0 голосов
/ 19 марта 2019

Я не думаю, что вы можете проверить между таким образом. Если вы разбиваете между ними на две части, кажется, работает:

Sub oefening1()
Dim jaarinkomen As Long
jaarinkomen = InputBox("Wat is uw jaarinkomen?")
If jaarinkomen < 18300 Then
    MsgBox ("U zit in klasse minimumloon of lager")
ElseIf 18300 <= jaarinkomen And jaarinkomen < 36500 Then
    MsgBox ("U zit in klasse benedenmodaal")
ElseIf 36500 <= jaarinkomen And jaarinkomen < 73000 Then
    MsgBox ("U zit in klasse bovenmodaal")
ElseIf 73000 <= jaarinkomen And jaarinkomen < 1000000 Then
    MsgBox ("U zit in klasse boven dubbelmodaal")
Else
    MsgBox ("U zit in klasse miljonair")
End If
End Sub

В дополнение к этому, гораздо более простой и масштабируемый способ добиться этого будет просто:

jaarinkomen = InputBox("Wat is uw jaarinkomen?")

salaries = Array(0, 18300, 36500, 73000, 1000000, 9900000)
responses = Array("U zit in klasse minimumloon of lager", "U zit in klasse benedenmodaal", "U zit in klasse bovenmodaal", "U zit in klasse boven dubbelmodaal", "U zit in klasse miljonair")

MsgBox responses(Application.Match(jaarinkomen - 0.01, salaries, True) - 1)
0 голосов
/ 19 марта 2019

Так как он остановится на первых If или Case, вам следует перейти от максимального к минимальному:

Option Explicit
Sub oefening1()

    Dim jaarinkomen As Long
    jaarinkomen = InputBox("Wat is uw jaarinkomen?")

    Select Case jaarinkomen
        Case Is >= 73000, Is < 1000000
            MsgBox ("U zit in klasse miljonair")
        Case Is >= 36500
            MsgBox ("U zit in klasse boven dubbelmodaal")
        Case Is >= 18300
            MsgBox ("U zit in klasse benedenmodaal")
        Case Is < 18300
            MsgBox ("U zit in klasse minimumloon of lager")
        Case Else
            MsgBox ("U zit in klasse miljonair")
    End Select

End Sub

Таким образом, вам не нужно использовать> И <, и это проще.</p>

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