Excel VBAinput框只有字母和最大长度

我想要一个input框,只允许1-3个字符的长度,只有字母AZ。 我尝试了几种不同的方法,但似乎无法得到任何工作

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

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_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 "[AZ]", _ strReturn Like "[AZ][AZ]", _ strReturn Like "[AZ][AZ][AZ]" Control_Sheet_VB.Range("C2").Value = strReturn Exit Do Case Else MsgBox "Must Be 1-3 Characters Try Again" End Select Loop End Sub 

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

您可以通过inputRegEx.Pattern = "[a-zA-Z]"来检查AZ(或az)的字符。 您可以通过添加.Pattern = "[a-zA-Z]{1,3}"来扩展它以允许1-3个字符的大小。

感谢@Slai,需要在开始时添加^$ ,最后closures它。

 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 

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

 Public Function CheckIfAlpha(strValue As String) As Boolean CheckIfAlpha = strValue Like WorksheetFunction.Rept("[A-ZA-Z]", Len(strValue)) End Function 

整个实施将像你的条件一样:

 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 

PS:试验和testing的代码:)

我喜欢这个代码,它检查input中是否有数字,你可以试试看:

 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 

你可能会在这之后

 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 "[AZ]" Or strReturn Like "[AZ][AZ]" Or strReturn Like "[AZ][AZ][AZ]" Then Exit Do MsgBox "Must Be 1-3 Characters" & vbCrLf & vbCrLf & "Try Again" Loop Control_Sheet_VB.Range("C2").Value = strReturn End Sub