我真的对这个感到困惑。已经搜索过网络,但没有找到与我的具体案例相关的任何答案。我有以下代码:
Dim CE_res As Integer
For Index = 1 To 7
Status = ""
CE_res = CInt(Worksheets("werkblad").Range("CEres" & Index).Value)
If CE_res = 0 Then
' Everything ok
Status = "Pass"
Else
Select Case CE_res
Case CE_res < -1500
Status = "Invalid kV Value"
Case CE_res < -999
Status = "No kV Value"
Case CE_res < -399
Status = "kV too high"
Case CE_res = 0
Status = "kV too low"
Case CE_res > 500
Status = "Invalid mAs Value"
Case CE_res > 49
Status = "mAs Value missing"
Case CE_res > 9 And CE_res < 50
Status = "Adapt Target"
Case CE_res > 200
Status = "Adapt Filter"
Case Else
Status = "No Selection"
End Select
End If
CE_res设置为50.但是,始终选择Case Else。将CE_res声明为整数,隐式工作表(&#34; werkblad&#34;)。范围(&#34; CEres&#34;&amp; Index)。值为一个整数,只是为了确定。 但是,它似乎没有正确执行Select Case。尝试了它也与其他值,甚至改变了案例CE_res&gt; 49到CE_res =&#34; 50&#34;但这也行不通。
现在,我认为可能出错了。
答案 0 :(得分:2)
您没有使用Case语句的正确语法
Dim CE_res As Integer
For Index = 1 To 7
Status = ""
CE_res = CInt(Worksheets("werkblad").Range("CEres" & Index).Value)
If CE_res = 0 Then
' Everything ok
Status = "Pass"
Else
Select Case CE_res
Case < -1500
Status = "Invalid kV Value"
Case < -999
Status = "No kV Value"
Case < -399
Status = "kV too high"
Case 0 ' or possibly Case < 0 ????
Status = "kV too low"
Case > 500
Status = "Invalid mAs Value"
Case > 200
Status = "Adapt Filter"
Case > 49
Status = "mAs Value missing"
Case > 9
Status = "Adapt Target"
Case Else
Status = "No Selection"
End Select
End If
请注意,我必须在> 200
之前移动> 49
,否则,例如,230的值将匹配> 49
,因此永远不会到达> 200
。
您拥有它的方式,语句Case CE_res < -1500
将测试CE_res
是< -1500
。如果是,那将返回True
,然后将其与案例陈述的对象(即CE_res
)进行比较,如果匹配(它不会),那么Select
语句将执行。
答案 1 :(得分:0)
如其他成员所述,由于您使用&lt; &GT; =比较你需要确保你正确地订购它们或者它们不会按预期工作。使用您正在使用的非常具体的值,您可能最好使用Select Case
Case -1000 TO -1500
'Do This
Case -400 TO -999
'Do That
Case -1 TO -399
'Do Something Else
End Select
并更具体地使用值。
CE_res
如果你这样做,那么什么不是什么,它更容易阅读,操作顺序无关紧要。
由于您已在Select Case CE-res
行指定了变量,因此您也无需将Select Case CE_res
Case <-1500
Status = "Invalid kV Value"
End Select
添加到每个Case语句中。正确的语法是
outer table