gpt4 book ai didi

vba - ElseIf 语句在不应与 "or"一起时被跳过

转载 作者:行者123 更新时间:2023-12-03 07:33:39 24 4
gpt4 key购买 nike

我正在构建一个小程序来帮助我们的技术人员进行一些数据导入。

我遇到的问题是 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(你可能永远不会得到这个,但我正在经历),它会发现第一个数字很高而第二个数字是正常的。然而,我的脚本在没有检查第一个数字的情况下首先发现第二个数字是正常的,所以它只显示“正常”,而实际上它是“高”。

最佳答案

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

关于vba - ElseIf 语句在不应与 "or"一起时被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48790948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com