VBA isString vs isNumeric

时间:2018-07-21 23:10:44

标签: excel vba excel-vba

我正在验证Excel中VB用户窗体中某些文本框中的数据。

数据可以是长度为6位的数字,长度至少为3个字符的字符串或字符串和数字的组合。

为此,我写道:

If Len(Trim(Me.TextBox1)) = 6 And IsNumeric(Trim(Me.TextBox1)) Then
  (do operation)
Elseif Len(Trim(Me.TextBox1)) > 2 and IsString(Trim(Me.TextBox1)) Then
  (do another operation)
Else
  (do third operation)
End if

我可以使其与isNumeric一起使用,但似乎VBA不支持isString。

有解决这个问题的聪明方法吗?

欢呼

1 个答案:

答案 0 :(得分:3)

您可以调用工作表功能

Application.WorksheetFunction.IsText

我可能会更舒适地走字符串并使用AscW进行测试,如果期望A-Za-z,则可以寻找65-90和95-122范围内的值。

您绝对可以在以下方面进行改进。您可以参考ascii codes来确定构成文本的可接受值。还要注意,网络上有很多功能可以完全执行此任务。

 Public Sub test()
    Dim s As String, i As Long
    s = "pr81"
    For i = 1 To Len(s)                          ' 65-90 and 95-122.
        Select Case True
        Case (AscW(Mid$(s, i, 1)) >= 65 And AscW(Mid$(s, i, 1)) <= 90) Or _
             (AscW(Mid$(s, i, 1)) >= 95 And AscW(Mid$(s, i, 1)) <= 122)
        Case Else
            MsgBox "Values are not all in range A-Za-z"
            Exit For
        End Select
    Next i
End Sub

感谢@DirkReichel,这是一个非常简化的测试:

Option Explicit
Public Sub test()
    Dim s As String, i As Long
    s = "pr81"
    For i = 1 To Len(s)
        If LCase(Mid$(s, i, 1)) = UCase(Mid$(s, i, 1)) Then
            MsgBox "Not all letters"
            Exit For
        End If
    Next i
End Sub