VBA Select Case在没有选择的情况下运行

时间:2017-06-04 07:43:26

标签: vba excel-vba select case excel

我真的对这个感到困惑。已经搜索过网络,但没有找到与我的具体案例相关的任何答案。我有以下代码:

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;但这也行不通。

现在,我认为可能出错了。

2 个答案:

答案 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