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

Isa*_*ein 7 excel vba function excel-vba

我正在使用一个函数,它允许我查看一串文本并评估它是否由字母组成.它位于一个名为"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  
Run Code Online (Sandbox Code Playgroud)

接下来,我有两个"if"例程,用于评估userform中文本框的前2个字符.第一个例程询问第一个字符是否为数字,第二个例程询问第二个字符是否为alpha.目前,当IsAlpha测试为True时,第二个"if"例程将我从子例程中弹出,而不是生成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
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 11

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

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

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

  • 正则表达式几乎用于所有编程语言 - 它是一种"模式匹配"方式,旨在完全用于此目的.VBA本身提供**非常**基本正则表达式,但是如果您愿意,您可以设置引用并变得更复杂.一个快速谷歌应该让你开始,那里有很多 (2认同)

Exc*_*ero 6

检查字符串是否仅包含字母字符的最直接、简洁且高效的方法是使用以下函数:

Function IsAlpha(s) As Boolean
    IsAlpha = Len(s) And Not s Like "*[!a-zA-Z]*"
End Function
Run Code Online (Sandbox Code Playgroud)

事实上,这稍微好一点......

Function IsAlpha(s$) As Boolean
    IsAlpha = Not s Like "*[!a-zA-Z]*"
End Function
Run Code Online (Sandbox Code Playgroud)


Saa*_*cky 5

尝试这个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
Run Code Online (Sandbox Code Playgroud)