我正在构建一个小程序来帮助我们在网站上输入一些数据和我们的技术人员。
我挣扎的是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;。
答案 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