ElseIf语句在不应该与"或"

时间:2018-02-14 15:39:27

标签: excel vba excel-vba logic

我正在构建一个小程序来帮助我们在网站上输入一些数据和我们的技术人员。

我挣扎的是bp检查,请参阅下面的代码:

Private Sub bphg_afterupdate()

'blood pressure values
'below 100/60 - low
'120/70 - normal
'140/90 - high, gp review
'180/100 - high, cut off for fitness for driving
'200/100 - high, cut off for driving/spiro
'230/120 - urgent review required


    If bpmm <= 100 Or bphg <= 60 Then
        bpcomment.Value = "LOW! - Seek Advice"
    ElseIf bpmm < 140 Or bphg < 90 Then
        bpcomment.Value = "Normal BP"
    ElseIf bpmm < 180 Or bphg < 100 Then
        bpcomment.Value = "High! - GP Review"
    ElseIf bpmm < 200 Then
        bpcomment.Value = "High! - Temp restriction to driving MPE/FLT"
    ElseIf bpmm < 230 Or bphg < 120 Then
        bpcomment.Value = "High! - To high for Spiro & Temp Driving Resitricion MPE/FLT"
    Else
        bpcomment.Value = "URGENT! - Review required"
    End If

End Sub

它正在做的是找到适合指定值然后停止的第一个值。它应该继续检查其他标准。

所以基本上是血压,在医生给你的2个数字中,要么可以确定你的血压是否正常。因此,当我们在表格中输入一个bp表示200/80(你可能永远不会得到这个,但我正在通过),它会发现第一个数字很高而第二个数字是正常的。然而,我的脚本是在没有检查第一个数字的情况下首先发现第二个数字是正常的,所以它只显示&#34; normal&#34;事实上,它是&#34;高&#34;。

2 个答案:

答案 0 :(得分:0)

Select Case是处理血压问题的更好方法:

Option Explicit

Public Sub TestMe()

    Dim bpmm        As Long
    Dim bphg        As Long

    bpmm = 100   'assign these two somehow. E.g.-> bpmm = ActiveSheet.Range("A1")
    bphg = 100

    Select Case True
        Case bpmm <= 100 Or bphg <= 60
            Debug.Print "LOW! - Seek Advice"
        Case bpmm < 140 Or bphg < 90
            Debug.Print "Normal BP"
        Case bpmm < 180 Or bphg < 100
            Debug.Print "High!"
        Case Else
            Debug.Print "URGENT! - Review required"
    End Select

End Sub

您可以将业务逻辑放在那里,而不是Debug.Print。只需确保您正确地订购条件 - 如果第一个条件评估为TRUE,则检查不会更进一步。

Select Case - Which way is faster? If elseif or select case

的性能优势很小

编辑:如果你的逻辑是,所有标准都应该单独和独立检查,那么请看一下:

Public Sub TestMe()

    Dim bpmm        As Long
    Dim bphg        As Long

    bpmm = 100   'assign these two somehow. E.g.-> bpmm = ActiveSheet.Range("A1")
    bphg = 100

    If bpmm <= 100 Or bphg <= 60 Then
        Debug.Print "LOW! - Seek Advice"
    End If
    If bpmm < 140 Or bphg < 90 Then
        Debug.Print "Normal BP"
    End If
    If bpmm < 180 Or bphg < 100 Then
        Debug.Print "High!"
    End If

End Sub

答案 1 :(得分:0)

根据您的描述,您似乎想要返回两个条件中最高的一个的结果。在这种情况下,您需要反转检查的顺序:

If bpmm >= 230 Or bphg >= 120 Then
    bpcomment.Value = "URGENT! - Review required"
ElseIf bpmm >= 200 Then
    bpcomment.Value = "High! - To high for Spiro & Temp Driving Resitricion MPE/FLT"
ElseIf bpmm >= 180 Or bphg >= 100 Then
    bpcomment.Value = "High! - Temp restriction to driving MPE/FLT"
ElseIf bpmm >= 140 Or bphg >= 90 Then
    bpcomment.Value = "High! - GP Review"
ElseIf bpmm >= 120 Or bphg >= 70 Then
    bpcomment.Value = "Normal BP"
Else
    bpcomment.Value = "LOW! - Seek Advice"
End If

但是,从100/60到120/70之间的情况说明(在功能顶部有说明)该怎么做并不清楚。上面的代码认为它很低。如果您想将其视为NORMAL,请从以下位置更改ElseIf

ElseIf bpmm >= 120 Or bphg >= 70 Then

为:

ElseIf bpmm >= 100 Or bphg >= 60 Then