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

Vba 如何检查字符串是否只包含字母?,vba,function,excel,Vba,Function,Excel,我正在使用一个函数,它允许我检查一个文本字符串,并评估它是否由字母组成。它位于一个名为“通用”的模块中。通用模块仅用于容纳公共函数和变量。功能代码如下所示: 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))

我正在使用一个函数,它允许我检查一个文本字符串,并评估它是否由字母组成。它位于一个名为“通用”的模块中。通用模块仅用于容纳公共函数和变量。功能代码如下所示:

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  
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
接下来,我有两个“if”例程,用于计算userform中文本框的前两个字符。第一个例程询问第一个字符是否为数字,第二个例程询问第二个字符是否为字母。目前,当IsAlpha测试为True时,第二个“if”例程将我从子例程中弹出,而不是生成MsgBox。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
                IsLetter = True
            Case Else
                IsLetter = False
                Exit For
        End Select
    Next
End Function  
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

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

为什么不改用正则表达式呢?那么就不涉及循环了:

Public Function IsAlpha(strValue As String) As Boolean
    IsAlpha = strValue Like WorksheetFunction.Rept("[a-zA-Z]", Len(strValue))
End Function
此外,当您创建用户定义函数(UDF)时,您需要确保将返回值分配给实际函数的名称,在这种情况下,
IsAlpha
-not
isleter
,否则该值将永远不会传回。

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

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

如果是IsAlpha(Mid$(Me.TxtDxCode.Text,2,1)),那么

这将返回“Z”,并且
IsAlpha
测试现在应该成功了


(字符串版本Left$、Mid$等比变体版本Left$、Mid$等稍微快一些-请参见)

检查字符串是否只包含字母字符的最直接、简洁和性能最好的方法是使用此函数:

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

DX代码应该是什么样子?你的函数名是“IsAlpha”。。你的退场任务:“胰岛”。。这不太好。@MaciejLos Char1=Alpha Char2=Numeric Additional Characters=Alpha+Numeric@IsaacRothstein,那么长度呢?嘿,这就是我复制我不知道如何反向工程的代码所得到的。因为目前,我不知道两者的区别是什么。几乎每种编程语言都使用正则表达式——这是一种“模式匹配”的方法,专门用于此目的。VBA本机提供非常基本的正则表达式,但如果愿意,可以设置引用并使其更复杂。一个快速的谷歌应该让你开始,有很多在那里