如何检查字符串是否只包含字母?

时间:2015-04-14 17:15:58

标签: vba function excel-vba excel

我使用的功能允许我查看一串文字并评估它是否由字母组成。它被安置在名为" General"的模块中。通用模块仅用于容纳公共函数和变量。功能代码如下:

Public Function IsAlpha(strValue As String) As Boolean
Dim intPos As Integer

    For intPos = 1 To Len(strValue)
        Select Case Asc(Mid(strValue, intPos, 1))
            Case 65 To 90, 97 To 122
                IsLetter = True
            Case Else
                IsLetter = False
                Exit For
        End Select
    Next
End Function  

接下来我有两个" if"用于评估userform中文本框的前2个字符的例程。第一个例程询问第一个字符是否为数字,第二个例程询问第二个字符是否为alpha。目前,第二个" if"当IsAlpha测试为True时,例程正在将我从子例程中弹出,而不是生成MsgBox。是否正确调用IsAlpha函数?

如果下面列出了例程代码:

Private Sub CmdMap_Click()

    With TxtDxCode
        If IsNumeric(Left(Me.TxtDxCode.Text, 1)) Then
            MsgBox "Incorrect DX Code format was entered. ", vbExclamation, "DX Code Entry"
            TxtDxCode.Value = ""
            TxtDxCode.SetFocus
            Exit Sub
        End If

        If IsAlpha(Left(Me.TxtDxCode.Text, 2)) Then
            MsgBox "Incorrect DX Code format was entered. ", vbExclamation, "DX Code Entry"
            TxtDxCode.Value = ""
            TxtDxCode.SetFocus
            Exit Sub
        End If
    End With

4 个答案:

答案 0 :(得分:11)

为什么不使用正则表达式呢?然后没有涉及循环:

Public Function IsAlpha(strValue As String) As Boolean
    IsAlpha = strValue Like WorksheetFunction.Rept("[a-zA-Z]", Len(strValue))
End Function

此外,当您创建用户定义函数(UDF)时,您需要确保将返回值分配给实际函数的名称,在这种情况下为IsAlpha - 否则为IsLetter该值永远不会被传回。

答案 1 :(得分:4)

检查字符串是否仅包含字母字符的最直接,简洁和高效的方法是使用此功能:

df.count

答案 2 :(得分:3)

试试IsAlpha

Public Function IsAlpha(strValue As String) As Boolean
Dim intPos As Integer

    For intPos = 1 To Len(strValue)
        Select Case Asc(Mid(strValue, intPos, 1))
            Case 65 To 90, 97 To 122
                IsAlpha = True
            Case Else
                IsAlpha = False
                Exit For
        End Select
    Next
End Function

答案 3 :(得分:0)

Left(Me.TxtDxCode.Text, 2)返回字符串的前两个字符。因此,如果Me.TxtDxCode.Text为7ZABC,则此表达式将返回" 7Z"。这会导致IsAlpha测试失败。

由于您只想检查第二个字符,请使用Mid $:

If IsAlpha(Mid$(Me.TxtDxCode.Text, 2, 1)) Then

这将返回" Z"并且IsAlpha测试现在应该成功

(字符串版本Left $,Mid $等比变体版本Left,Mid等稍快 - 请参阅here