2014-09-16 3 views
0

날짜 입력 필드에 월/일/연도 사이에 "/"가 자동으로 입력되도록하는 방법이 있습니까?
현재 양식에 날짜가 올바른 날짜 형식으로 입력되었는지 확인하고 항목이 mm/dd/yyyy로 작성되었는지 확인하지만 수동으로 필요로하는 사용자를 제거하고 싶습니다. "/"를 모두 입력하고 연구 및 테스트에서 실행 가능한 솔루션을 찾지 못했습니다. 모든 유용한 솔루션을 크게 주시면 감사하겠습니다.Excel 양식 - 항목

감사합니다.

If Me.TourDateText.Value = "" Then 
    MsgBox "Please enter Tour Date.", vbExclamation, "frmEntry" 
    Me.FirstNameText.SetFocus 
    Exit Sub 
    End If 

    With Me.TourDateText 
    If Not IsDate(.Value) Then 
    .SetFocus 
    MsgBox "Enter a valid date" 
    Exit Sub 
    End If 
    End With 

    If Not IsDate(Me.TourDateText.Value) Then 
    MsgBox "The Tour Date field must contain only dates in the format mm/dd/yyyy.", vbExclamation, "frmEntry" 
    Me.TourDateText.SetFocus  
    Exit Sub 
    End If 
+0

보세요. 텍스트를 입력 할 때 구문 분석에 사용할 수 있습니다. –

+1

* 달 *, * 일 * 및 * 연도 *에 각각 하나씩 세 개의 텍스트 상자를 사용하는 것이 좋습니다. 이것은 이상한 일이 아니며 실제로 사용자의 관점에서 생각할 수 있습니다. 매우 드물게 * 형식화 된 날짜 *를 요구하는 양식 입력을 볼 수 있습니다. 그 이유는 정확하게 형식화 된 날짜를 확인하기가 어렵 기 때문입니다. 별도로 유효성을 검사하는 것이 훨씬 쉽고 끝까지 쉽게 결합하여 날짜로 연결할 수 있습니다. –

+2

[이 도움말 (http://stackoverflow.com/questions/12012206/formatting-mm-dd-yyyy-dates-in-textbox-in-vba/12013961#12013961) 도움이 되셨습니까? –

답변

1

당신은

Private Sub TourDateText_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 

Select Case KeyAscii 
    Case Asc("0") To Asc("9") 
    Case Else 
    KeyAscii = 0 
End Select 
If Len(Me.TourDateText.Text) = 2 Then 
    If Val(Me.TourDateText.Text) > 12 Then KeyAscii = 0 Else _ 
    Me.TourDateText.Text = Me.TourDateText.Text & "/" 
End If 
If Len(Me.TourDateText.Text) = 5 Then 
    If Val(Mid(Me.TourDateText.Text, 4, 2)) > 31 Then KeyAscii = 0 Else _ 
    Me.TourDateText.Text = Me.TourDateText.Text & "/" 
End If 
If Len(Me.TourDateText.Text) >= 10 Then KeyAscii = 0 

End Sub 

두 번째 버전 사용자 정의 폼에 다음과 다음 수 :

Private Sub TourDateText_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 

Debug.Print KeyAscii 

If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 
If Len(Me.TourDateText.Text) = 2 Then 
    If Val(Me.TourDateText.Text) > 12 Then KeyAscii = 0 Else _ 
    Me.TourDateText.Text = Me.TourDateText.Text & "/" 
End If 
If Len(Me.TourDateText.Text) = 5 Then 
    If Val(Mid(Me.TourDateText.Text, 4, 2)) > 31 Then KeyAscii = 0 Else _ 
    Me.TourDateText.Text = Me.TourDateText.Text & "/" 
End If 
If Len(Me.TourDateText.Text) >= 10 Then KeyAscii = 0 

End Sub 

이제 사용자가 입력 09,172,014와 텍스트 2014년 9월 17일 될 것입니다 수 있습니다. 또는 09 [any key] 17 [any key] 2014가 될 수 있으며 텍스트는 2014 년 9 월 17 일이됩니다.

달> 12 일 및 31 일>도 예방할 수 있습니다. 월이 31 일인지 여부를 확인할 수 없기 때문에 이 아니고 최종 데이터 유효성 검사입니다. 그러나 최종 데이터 유효성 검사는 이미 귀하에게 있습니다.

인사말

은`Textbox_Change` 이벤트에서

악셀

+0

Dear @AxelRichter, 고맙습니다. 너의 도움으로! 내 양식의 코드 내에서이 하위 입력하려고했습니다 및 TourDateText 필드를 더 이상 입력을 허용하지 않습니다. 입력 상자를 선택할 수는 있지만 숫자 나 텍스트 입력이 허용되지 않습니다. 이것에 대한 해결책을 알고 있습니까? – user3794203

+0

@AxelRichter 도와 주셔서 감사합니다. 이 UserForm을 작성하기 위해 Excel 2013을 사용하고 있으며 컨트롤은 입력 상자입니다. 숫자 패드로 번호를 입력하고 Num Lock이 켜져 있습니다 ... 왜 데이터 입력을 허용하지 않는지 잘 모르겠습니다. – user3794203

+0

나는 얕은 이해에 대해 사과합니다. 저는 약 3 개월 동안 vba에서 글쓰기와 편집 만하고 시행 착오를 통해 자신을 가르쳐 왔습니다. 업데이트 된 하위 항목을 입력 한 후 VBA 편집기에서 반환 된 ASCII 코드는 48 (0), 57 (9)입니다. – user3794203