我正在验证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。
有解决这个问题的聪明方法吗?
欢呼
答案 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