将输入框中的用户输入限制为字母数字和' - '

时间:2016-04-03 18:19:33

标签: excel vba excel-vba

如何将输入框中的用户输入限制为字母,数字和字符' - '? 我尝试了以下代码。

For I = 1 To Len(UserInput)

    If VBA.Asc(VBA.Mid(UserInput, I, 1)) >= 65 And VBA.Asc(VBA.Mid(UserInput, I, 1)) <= 90 Or VBA.Asc(VBA.Mid(UserInput, I, 1)) >= 0 And VBA.Asc(VBA.Mid(UserInput, I, 1)) <= 9 Or VBA.Asc(VBA.Mid(UserInput, I, 1)) = 45
    Then
         IsNumeric (UserInput)
         UserInput = Cells(Row, 7).Value
     Else
         MsgBox ("Invalid Entry")
     End If
 Next I

我看到应用程序定义或对象定义错误。谁能请你帮忙。

4 个答案:

答案 0 :(得分:0)

在我看来,你得到的ASCII码范围不正确。数字从48到57,小字符在65到90之间,大写字母在97到122之间。连字符在45的代码中是正确的。

'\0'

此外,您缺少一些括号以确保范围(在48和57之间)或(下一个范围)或(下一个范围)或是连字符(代码45)。

答案 1 :(得分:0)

这2个功能应该做你需要的一切:

Public Function textCheck(ByVal UserInput As String) As Boolean
  Dim i As Long
  While Len(UserInput)
    Select Case Asc(Left(UserInput, 1))
    Case 45, 48 To 57, 65 To 90, 97 To 122
      UserInput = Mid(UserInput, 2)
    Case Else
      Exit Function
    End Select
  Wend
  textCheck = True
End Function
Public Function textChange(ByVal UserInput As String) As String
  Dim str As String
  While Len(UserInput)
    Select Case Asc(Left(UserInput, 1))
    Case 45, 48 To 57, 65 To 90, 97 To 122
      textChange = textChange & Left(UserInput, 1)
    End Select
    UserInput = Mid(UserInput, 2)
  Wend
End Function

如果字符串中没有“forbitten”字符,则第一个只返回true,否则为false
第二个函数返回一个字符串,其中所有“forbitten”字符都被删除。

如果您有任何疑问,请询问(此代码应该很容易让每个人都可读);)

答案 2 :(得分:0)

我必须在do-while循环中修复一个小错误。它使用下面的代码。

Do
  UserInput1 = Application.InputBox("EnterShelf Number")
  For j = 1 To Len(UserInput1)
    Select Case Asc(Mid(UserInput1, j, 1))
    Case 48 To 57
      Cells(Row, 8).Select
      ActiveCell.Formula = UserInput1
      cnt1 = 0
    Case Else
      cnt1 = 1
      MsgBox ("Invalid Entry")
    End Select
  Next
Loop While cnt1 <> 0

答案 3 :(得分:0)

避免逐个字符循环。

测试字符串

Sub TextVal()
Debug.Print blStrCheck("abcdADDD-129")
Debug.Print blStrCheck("abcdADDD-129")
Debug.Print blStrCheck("123")
Debug.Print blStrCheck("abcdACBC")
Debug.Print blStrCheck("-")
End Sub

功能

Function blStrCheck(strIn As String) As Boolean
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
objRegex.ignorecase = True
objRegex.Pattern = "[/d-]"
blStrCheck = objRegex.test(strIn)
End Function