Validate entry of an input box

Adrian Gornall picture Adrian Gornall · Feb 24, 2014 · Viewed 19.2k times · Source

Im trying to get an input box to validate the entries a user will make.

i'm using the below script but cant get the validation to work, any help would be appreciated.

 Sub inputbox()

 Dim Manager As Long

     On Error Resume Next

        Application.DisplayAlerts = False

        Manager = Application.inputbox(Prompt:="Please enter a manager.", Title:="Pick A Manager Name",      Type:=1)

On Error GoTo 0

Application.DisplayAlerts = True

    If Manager = "" Then

        Exit Sub

    ElseIf Manager <> Ben, Cameron, Chris, Martin, Peter Then

    MsgBox "Incorrect Name, pick a new one!"

    Else

        MsgBox "Your input was " & Manager

    End If

 End Sub

Answer

PatricK picture PatricK · Feb 24, 2014

Although a Sub name same as built in ones are not recommended, you can do what you are after like below.

First you need to change the InputBox Type to 2 (String), since you are comparing with String. Then you should make a function to check if the input is part of a Manager List.

Sub inputbox()
    On Error Resume Next
    Dim Manager As String

    Manager = Application.inputbox(Prompt:="Please enter a manager name:", Title:="Pick A Manager Name", Type:=2)

    If Manager <> "" Then
        If IsManager(Manager) Then
            MsgBox "Your input was " & Manager
        Else
            MsgBox "Incorrect Name, pick a new one!"
        End If
    End If
End Sub

Private Function IsManager(sTxt As String) As Boolean
    Dim aManagers As Variant, oItem As Variant, bAns As Boolean
    aManagers = Array("Ben", "Cameron", "Chris", "Martin", "Peter")
    bAns = False
    For Each oItem In aManagers
        If LCase(oItem) = LCase(Trim(sTxt)) Then
            bAns = True
            Exit For
        End If
    Next
    IsManager = bAns
End Function

UPDATE (Improved version suggested by Simon1979):

Private Function IsManager(sTxt As String) As Boolean
    On Error Resume Next
    Dim aManagers As Variant
    aManagers = Array("Ben", "Cameron", "Chris", "Martin", "Peter")
    IsManager = Not IsError(Application.WorksheetFunction.Match(Trim(sTxt), aManagers, 0))
End Function