仅Excel VBA输入框字母和最大长度

仅Excel VBA输入框字母和最大长度,vba,excel,Vba,Excel,我想要一个输入框,只允许1-3个字符的长度和字母A-Z。我已经尝试了一些不同的方式,但似乎无法得到任何工作 我现在使用这个代码,但它只限制长度 Sub Change_Ticket_Initials() Dim strReturn As String strReturn = InputBox("Enter Initials", "Change Ticket Initials") If strReturn = vbNullString Then Exit Sub 'if "" exit sub

我想要一个输入框,只允许1-3个字符的长度和字母A-Z。我已经尝试了一些不同的方式,但似乎无法得到任何工作

我现在使用这个代码,但它只限制长度

Sub Change_Ticket_Initials()

Dim strReturn As String

strReturn = InputBox("Enter Initials", "Change Ticket Initials")
If strReturn = vbNullString Then Exit Sub 'if "" exit sub

If Len(strReturn) < 1 Or Len(strReturn) > 3 Then
    MsgBox "Must Be 1-3 Characters Try Again"
    Run "Change_Ticket_Initials"
Else
    Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
End If

End Sub                  
Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
如果strReturn=vbNullString,则退出子项“如果”退出子项
如果Len(strReturn)<1或Len(strReturn)>3,则
MsgBox“必须为1-3个字符,请重试”
运行“更改票据首字母”
其他的
控制表VB.Range(“C2”)。值=UCase(strReturn)
如果结束
端接头
单向:

Sub Change_Ticket_Initials()

    Dim strReturn As String

    Do
        strReturn = UCase$(InputBox("Enter Initials", "Change Ticket Initials"))

        Select Case True
            Case strReturn = ""
                 Exit Sub
            Case strReturn Like "[A-Z]", _
                 strReturn Like "[A-Z][A-Z]", _
                 strReturn Like "[A-Z][A-Z][A-Z]"

                 Control_Sheet_VB.Range("C2").Value = strReturn
                 Exit Do
            Case Else
                 MsgBox "Must Be 1-3 Characters Try Again"
        End Select
    Loop

End Sub
单向:

Sub Change_Ticket_Initials()

    Dim strReturn As String

    Do
        strReturn = UCase$(InputBox("Enter Initials", "Change Ticket Initials"))

        Select Case True
            Case strReturn = ""
                 Exit Sub
            Case strReturn Like "[A-Z]", _
                 strReturn Like "[A-Z][A-Z]", _
                 strReturn Like "[A-Z][A-Z][A-Z]"

                 Control_Sheet_VB.Range("C2").Value = strReturn
                 Exit Do
            Case Else
                 MsgBox "Must Be 1-3 Characters Try Again"
        End Select
    Loop

End Sub
你可能在找这个

Option Explicit

Sub Change_Ticket_Initials()
    Dim strReturn As String
    Dim Control_Sheet_VB As Worksheet

    Do
        strReturn = UCase(Application.InputBox("Enter Initials", "Change Ticket Initials", Type:=2))
        If strReturn = vbNullString Then Exit Sub 'if "" exit sub
        If strReturn Like "[A-Z]" Or strReturn Like "[A-Z][A-Z]" Or strReturn Like "[A-Z][A-Z][A-Z]" Then Exit Do
        MsgBox "Must Be 1-3 Characters" & vbCrLf & vbCrLf & "Try Again"
    Loop
    Control_Sheet_VB.Range("C2").Value = strReturn
End Sub
你可能在找这个

Option Explicit

Sub Change_Ticket_Initials()
    Dim strReturn As String
    Dim Control_Sheet_VB As Worksheet

    Do
        strReturn = UCase(Application.InputBox("Enter Initials", "Change Ticket Initials", Type:=2))
        If strReturn = vbNullString Then Exit Sub 'if "" exit sub
        If strReturn Like "[A-Z]" Or strReturn Like "[A-Z][A-Z]" Or strReturn Like "[A-Z][A-Z][A-Z]" Then Exit Do
        MsgBox "Must Be 1-3 Characters" & vbCrLf & vbCrLf & "Try Again"
    Loop
    Control_Sheet_VB.Range("C2").Value = strReturn
End Sub

您可以使用下面的函数轻松检查字符串是否只包含字母

Public Function CheckIfAlpha(strValue As String) As Boolean
    CheckIfAlpha = strValue Like WorksheetFunction.Rept("[A-ZA-Z]", Len(strValue))
End Function 
整个实施过程将与您的if条件相结合:

Sub Change_Ticket_Initials()

Dim strReturn As String
strReturn = InputBox("Enter Initials", "Change Ticket Initials")

    If strReturn = vbNullString Then Exit Sub 'if "" exit sub

If Len(strReturn) < 1 Or Len(strReturn) > 3 Or Not CheckIfAlpha(strReturn) Then
MsgBox "Must Be 1-3 Alphabet Characters Try Again"
Run "Change_Ticket_Initials"

    Else
Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
    End If

End Sub
Public Function CheckIfAlpha(strValue As String) As Boolean
    CheckIfAlpha = strValue Like WorksheetFunction.Rept("[A-ZA-Z]", Len(strValue))
End Function
Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
如果strReturn=vbNullString,则退出子项“如果”退出子项
如果Len(strReturn)<1或Len(strReturn)>3或未检查Alpha(strReturn),则
MsgBox“必须是1-3个字母字符,请重试”
运行“更改票据首字母”
其他的
控制表VB.Range(“C2”)。值=UCase(strReturn)
如果结束
端接头
公共函数CheckIfAlpha(strValue作为字符串)作为布尔值
CheckIfAlpha=strValue-Like工作表函数。报告(“[A-ZA-Z]”,Len(strValue))
端函数

PS:经过测试的代码:)

您可以使用下面的函数轻松检查字符串是否只包含字母

Public Function CheckIfAlpha(strValue As String) As Boolean
    CheckIfAlpha = strValue Like WorksheetFunction.Rept("[A-ZA-Z]", Len(strValue))
End Function 
整个实施过程将与您的if条件相结合:

Sub Change_Ticket_Initials()

Dim strReturn As String
strReturn = InputBox("Enter Initials", "Change Ticket Initials")

    If strReturn = vbNullString Then Exit Sub 'if "" exit sub

If Len(strReturn) < 1 Or Len(strReturn) > 3 Or Not CheckIfAlpha(strReturn) Then
MsgBox "Must Be 1-3 Alphabet Characters Try Again"
Run "Change_Ticket_Initials"

    Else
Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
    End If

End Sub
Public Function CheckIfAlpha(strValue As String) As Boolean
    CheckIfAlpha = strValue Like WorksheetFunction.Rept("[A-ZA-Z]", Len(strValue))
End Function
Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
如果strReturn=vbNullString,则退出子项“如果”退出子项
如果Len(strReturn)<1或Len(strReturn)>3或未检查Alpha(strReturn),则
MsgBox“必须是1-3个字母字符,请重试”
运行“更改票据首字母”
其他的
控制表VB.Range(“C2”)。值=UCase(strReturn)
如果结束
端接头
公共函数CheckIfAlpha(strValue作为字符串)作为布尔值
CheckIfAlpha=strValue-Like工作表函数。报告(“[A-ZA-Z]”,Len(strValue))
端函数

PS:经过尝试和测试的代码:)

我认为这正是他们提出
RegEx
对象的原因

您可以通过在
RegEx.Pattern=“[A-zA-Z]”中输入

.
您可以通过添加
.Pattern=“[a-zA-Z]{1,3}”
将其扩展为允许1-3个字符的大小

由于@Slai,需要在开头和结尾添加
^
$
,才能将其关闭

代码

Sub Change_Ticket_Initials()

Dim strReturn As String
Dim RegEx As Object, Match As Object

strReturn = InputBox("Enter Initials", "Change Ticket Initials")

Set RegEx = CreateObject("vbscript.regexp")
With RegEx
    .MultiLine = False
    .Global = True
    .IgnoreCase = True
    .Pattern = "^[a-zA-Z]{1,3}$" ' <-- does it all in 1 line : Match 1-3 consecutive letters
End With

Set Match = RegEx.Execute(strReturn)

If Match.Count = 1 Then ' <-- make sure there is only 1 match
    Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
Else
    MsgBox "Must Be 1-3 Characters Try Again"
    Run "Change_Ticket_Initials"
End If

End Sub
Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
Dim RegEx作为对象,Match作为对象
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
设置RegEx=CreateObject(“vbscript.regexp”)
用正则表达式
.MultiLine=False
.Global=True
.IgnoreCase=True

.Pattern=“^[a-zA-Z]{1,3}$”我认为这正是他们提出
RegEx
对象的原因

您可以通过在
RegEx.Pattern=“[A-zA-Z]”中输入

.
您可以通过添加
.Pattern=“[a-zA-Z]{1,3}”
将其扩展为允许1-3个字符的大小

由于@Slai,需要在开头和结尾添加
^
$
,才能将其关闭

代码

Sub Change_Ticket_Initials()

Dim strReturn As String
Dim RegEx As Object, Match As Object

strReturn = InputBox("Enter Initials", "Change Ticket Initials")

Set RegEx = CreateObject("vbscript.regexp")
With RegEx
    .MultiLine = False
    .Global = True
    .IgnoreCase = True
    .Pattern = "^[a-zA-Z]{1,3}$" ' <-- does it all in 1 line : Match 1-3 consecutive letters
End With

Set Match = RegEx.Execute(strReturn)

If Match.Count = 1 Then ' <-- make sure there is only 1 match
    Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
Else
    MsgBox "Must Be 1-3 Characters Try Again"
    Run "Change_Ticket_Initials"
End If

End Sub
Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
Dim RegEx作为对象,Match作为对象
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
设置RegEx=CreateObject(“vbscript.regexp”)
用正则表达式
.MultiLine=False
.Global=True
.IgnoreCase=True

.Pattern=“^[a-zA-Z]{1,3}$”我喜欢这段代码,它检查输入中是否有数字,您可以试试:

Private Sub Change_Ticket_Initials()

Dim strReturn As String
Dim strCheck as Boolean
Dim aChar As Boolean

strReturn = InputBox("Enter Initials", "Change Ticket Initials")

For strCheck = 1 To Len(strReturn)
    aChar = False
    aChar = IsNumeric(Mid(strReturn, strCheck, 1))

    If aChar = True Then
        MsgBox "No numbers allowed"
        Exit Sub
    End If

Next strCheck

If strReturn = vbNullString Then Exit Sub 'if "" exit sub

If Len(strReturn) < 1 Or Len(strReturn) > 3 Then
    MsgBox "Must Be 1-3 Characters Try Again"
    Run "Change_Ticket_Initials"

Else
    Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
End If

End Sub
Private Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
Dim strCheck作为布尔值
Dim aChar为布尔型
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
对于strCheck=1至Len(strReturn)
阿喀尔=假
aChar=IsNumeric(中间(strReturn,strCheck,1))
如果aChar=True,则
MsgBox“不允许使用数字”
出口接头
如果结束
下一个strCheck
如果strReturn=vbNullString,则退出子项“如果”退出子项
如果Len(strReturn)<1或Len(strReturn)>3,则
MsgBox“必须为1-3个字符,请重试”
运行“更改票据首字母”
其他的
控制表VB.Range(“C2”)。值=UCase(strReturn)
如果结束
端接头

我喜欢这段代码,它检查输入中是否有数字,您可以试试:

Private Sub Change_Ticket_Initials()

Dim strReturn As String
Dim strCheck as Boolean
Dim aChar As Boolean

strReturn = InputBox("Enter Initials", "Change Ticket Initials")

For strCheck = 1 To Len(strReturn)
    aChar = False
    aChar = IsNumeric(Mid(strReturn, strCheck, 1))

    If aChar = True Then
        MsgBox "No numbers allowed"
        Exit Sub
    End If

Next strCheck

If strReturn = vbNullString Then Exit Sub 'if "" exit sub

If Len(strReturn) < 1 Or Len(strReturn) > 3 Then
    MsgBox "Must Be 1-3 Characters Try Again"
    Run "Change_Ticket_Initials"

Else
    Control_Sheet_VB.Range("C2").Value = UCase(strReturn)
End If

End Sub
Private Sub Change\u Ticket\u缩写()
变暗strReturn为字符串
Dim strCheck作为布尔值
Dim aChar为布尔型
strReturn=InputBox(“输入首字母”,“更改票证首字母”)
对于strCheck=1至Len(strReturn)
阿喀尔=假
aChar=IsNumeric(中间(strReturn,strCheck,1))
如果aChar=True,则
MsgBox“不允许使用数字”
出口接头
如果结束
下一个strCheck
如果strReturn=vbNullString,则退出子项“如果”退出子项
如果Len(strReturn)<1或Len(strReturn)>3,则
MsgBox“必须为1-3个字符,请重试”
运行“更改票据首字母”
其他的
控制表VB.Range(“C2”)。值=UCase(strReturn)
如果结束
端接头

您到底想要什么?要在用户按键时检查输入,或仅在单元格失去焦点时检查输入(例如按ENTER键)?@FDavidov当用户单击“确定”时,如果输入框不是字母,则会弹出一个只显示字母的msgbox,然后按照其他人的建议使用
RegEx
重新打开输入框,您可以使用正则表达式或下面@Alex发布的解决方案(对小写输入进行必要的修复)。我个人更喜欢显式编码(例如,检查是否在字符串“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”
中找到每个字母)。这是个问题