VBA Select case 1 to 100 只取 1

Posted

技术标签:

【中文标题】VBA Select case 1 to 100 只取 1【英文标题】:VBA Select case 1 to 100 only taking 1 【发布时间】:2020-04-17 22:47:05 【问题描述】:

我正在尝试创建一个选择案例来识别一个数字是小于 0、1 到 100 还是大于 100,事实是这不起作用。这是我的代码:

If IsNumeric(TxtTemp.Text) Then

    Select Case TxtTemp.Text

        Case Is <= 0
            TxtEstado.Text = "Solid"

        Case 1 To 100
            TxtEstado.Text = "Liquid"

        Case Is > 100
            TxtEstado.Text = "Gas"

    End Select

Else

TxtEstado.Text = ""

End If

我知道这是一件容易的事情,事情是只有当接收到的数字等于 1 时,select 案例才返回液体。如果它小于或等于 0,它会返回固体,但如果它等于或大于 2,它返回气体。我不明白我做错了什么。

【问题讨论】:

试试Select Case CDbl(TxtTemp.Text) 您需要将一个数字与其他数字进行比较。 对于任何编程语言都要记住这一点:“字符串或字符1 与数字 1 不同”,即使它们在视觉上看起来相同。所以需要转换成相同的Data类型进行比较。 只是在此处添加`Case Is > 100`可能是Case Else 好的,这是有道理的,我最终做的是将'TxtTemp.Text'存储在一个双变量中并且它有效,现在它为什么有效并且你的答案是一个更好的方法是有道理的做它。谢谢! 【参考方案1】:

也许使用函数进行这种转换更容易

    Function chText(txt As String) As String

    On Error GoTo EH

        Dim resTxt As String

        If IsNumeric(txt) Then
            Select Case CDbl(txt)
                Case Is <= 0
                    resTxt = "Solid"
                Case 1 To 100
                    resTxt = "Liquid"
                Case Is > 100
                    resTxt = "Gas"
            End Select
        Else
            resTxt = ""
        End If

        chText = resTxt

        Exit Function

    EH:
        chText = "Error"

    End Function

Sub Tester()

 Debug.Print chText("101")
' TxtEstado.Text = chText(TxtTemp.Text)

End Sub

【讨论】:

以上是关于VBA Select case 1 to 100 只取 1的主要内容,如果未能解决你的问题,请参考以下文章

Select Case 语句 - IF 语句 - 定义数组 - VBA

使用C#如何表达VBA“select case control.ID”

使用VBA轻松实现汉字与拼音的转换

为啥我会从 VBA Select Case 获得随机/错误的输出?

如何使用 SELECT CASE 和 TO 使用 INTEGER

vba中五种循环语句的区别