2014-02-24 3 views
1

사용자가 입력 할 항목의 유효성을 검사하는 입력 상자를 얻으 려합니다.입력 상자의 입력 유효성 확인

아래 스크립트를 사용하고 있지만 유효성 검사를받지 못하면 어떤 도움도 받으실 수 있습니다.

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 

답변

3

기본 제공되는 것과 같은 하위 이름은 권장하지 않지만 다음과 같이 할 수 있습니다. 당신은 문자열과 비교되기 때문에

먼저 당신은 2 (문자열)로에서 InputBox 유형을 변경해야합니다. 그런 다음 입력이 관리자 목록의 일부인지 확인하는 기능을 만들어야합니다.

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 (Simon1979에 의해 제안 향상된 버전) : 다음 STRM의 값이 어떻게

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 
+1

나는 배열의 사용을 좋아한다. 배열을 반복하는 대신'IsError (Application.Match (Trim (sTxt), aManagers, False)) Then Then'을 사용하여 항목이 배열에 없으면 true를 반환합니다. – Simon1979

+0

팁 주셔서 감사합니다! 다른 독자들에게는 : 그것은'Application.WorksheetFunction.Match()'이어야합니다. – PatricK

1

Excel에서 InputBox를 사용하지 않았지만 Access One과 매우 유사하다고 상상해보십시오. 나는에서 InputBox 검증하기 위해 아래의 방법을 사용하십시오

Dim strM as string 

EnterManager: 
strM = InputBox("Enter Manager.") 
If StrPtr(strM) = 0 Then 'Cancel was pressed 
    ' Handle what to do if cancel pressed 
    Exit Sub 
ElseIf Len(strM) = 0 Then 'OK was pressed with nothing entered 
    MsgBox "You must enter a Manager." 
    GoTo EnterBuyer 
End If 

난 당신 이름의 목록을 확인하기 위해 당신이 가지고있는 접근 방법을 사용할 수 있습니다 모르겠어요, 다른 If에 추가 할 수있는 기준을 추가하려면. 또한 변수가 할당되지 않은 한 ManagerBen, Cameron, Chris, Martin, Peter이라는 긴 이름을 비교하는 방법을 이해할 수 없습니다.이 경우 접두어를 추가하면 lBen과 같이 더 명확하게 표시되어 strBen과는 대조적으로 쉽게 볼 수 있습니다. 변수 유형의 차이.

If strM <> "Ben" And strM <> "Cameron" And strM <> "Chris" And strM <> _ 
    "Martin" And strM <> "Peter" Then 
    MsgBox "Incorrect Name, pick a new one!" 
Else 
    MsgBox "Your input was " & strM 
End If 
+0

확인이 좋아 보인다는 셀에 "PID" "G9"라는 시트에 입력. 감사. –

+0

'워크 시트 ("PID"). 범위 ("G9") = strM'이 작업을 수행해야합니다. – Simon1979

+0

감사합니다. –