2012-02-04 2 views
1

텍스트 상자에 입력 한 날짜가 유효한지 확인해야합니다. 하나의 텍스트 상자 여야합니다. 따라서이 방법으로는 해결 방법이 없습니다. 지금, 나는이 코드를 가지고 : 그것은 이탈리아어 텍스트가있는 경우텍스트 상자에서 데이터 컨트롤 및 일/월 반전 값

Private Sub cmdOK_Click() 
Dim dataAnalisi As Date 
If IsDate(txtDataAnalisi.Value) Then 
dataAnalisi = txtDataAnalisi.Value 
    Dim giornoAnalisi, meseAnalisi As Integer 
    giornoAnalisi = Format(dataAnalisi, "dd") 
    meseAnalisi = Format(dataAnalisi, "mm") 
    If giornoAnalisi <= 31 And meseAnalisi <= 12 Then 
     Call arrayList(dataAnalisi) 
     Unload Me 
    Else 
     GoTo DateError 
    End If 
Else 
DateError: 
    MsgBox "Inserire una data formattata correttamente!", vbCritical, "Errore nell'inserimento!" 
    txtDataAnalisi.SetFocus 
End If 
End Sub 

죄송합니다. 이 함수는 제대로 작동하지만 유일한 문제는 11/14/12 (날짜가 dd/mm/yy이고 14가 실수 인 경우)를 입력하면 날짜와 월 값이 반전된다는 것입니다. 대신, 하위 사용자가 입력 내용을 다시 확인하도록 알려줍니다. 나 좀 도와 줄 수있어? 고맙습니다!

+0

호출 배열 목록 호출이란 무엇입니까? 당신은 당신의 시트의 예를 제공해 줄 수 있습니까? – Raystafarian

+0

단일 텍스트 상자 여야하지만, 결과를 절대적으로 제어하기 위해 팝업하는 날짜 표시기를 사용할 수도 있습니다 – datatoo

답변

0

매월이 질문의 변형이 있습니다. 나는 Excel이 미국 날짜로서 유효한 미국 날짜 인 날짜를 처리 할 것이라고 확신한다. 나는 수년 동안 이것을 생각했지만 다른 사람들은 의견이 맞지 않습니다.

Excel과 같은 형식을 잘못 판단하여 형식을 잘못 해석한다고 생각하는 형식의 함수를 사용합니다.

영어 약자를 몇 달 동안 사용합니다. 나는 프랑스어가 세 달 정도의 세자 약어를 허용하지 않는 유일한 언어라고 믿습니다. 아마도 당신 만의 세트를 가질 것입니다. 루틴의 해당 부분을 요구 사항에 맞게 조정해야합니다.

희망이 도움이됩니다.

Function MyDateValue(ByVal DateIn As String, ByRef DateOut As Date) As Boolean 

    ' DateIn is a value to be checked as a valid date. 
    ' If it is a valid date, DateOut is set to its value and the function 
    ' returns True. 

    ' Excel misinterprets dates such as "4/14/11" as 14 April 2011. This routine 
    ' checks for such dates and, if necessary, changes them to an unambiguous 
    ' format before calling IsDate and DateValue. 

    Dim DatePart() As String 
    Dim MonthNum As Long 

    Const MonthAbbr As String = "janfebmaraprmayjunjulaugsepoctnovdec" 

    ' Replace popular delimiters with Microsoft standard 
    DateIn = Replace(DateIn, "-", "/") 
    DateIn = Replace(DateIn, "\", "/") 

    DatePart = Split(DateIn, "/") 
    If UBound(DatePart) = 2 Then 
    ' DateStg is three values separated by delimiters 
    ' Check middle part 
    If IsNumeric(DatePart(1)) Then 
     MonthNum = Val(DatePart(1)) 
     If MonthNum >= 1 And MonthNum <= 12 Then 
     ' Middle part could be numeric month 
     ' Convert to format Excel does not misinterpret 
     'Debug.Assert False 
     DatePart(1) = Mid(MonthAbbr, ((MonthNum - 1) * 3) + 1, 3) 
     DateIn = Join(DatePart, "-") 
     If IsDate(DateIn) Then 
      DateOut = DateValue(DateIn) 
      MyDateValue = True 
      Exit Function 
     End If 
     Else 
     ' Middle part cannot be a month 
     'Debug.Assert False 
     MyDateValue = False 
     Exit Function 
     End If 
    Else 
     'Debug.Assert False 
     ' The middle part is not a number. It could be a month abbreviation 
     MonthNum = InStr(1, MonthAbbr, LCase(DatePart(1))) 
     If MonthNum = 0 Then 
     ' The middle portion is neither a month number nor a month abbreviation 
     Debug.Assert False 
     MyDateValue = False 
     Else 
     ' The middle portion is a month abbreviation. 
     ' Excel will handle date correctly 
     'Debug.Assert False 
     MonthNum = (MonthNum - 1)/3 + 1 
     DateIn = Join(DatePart, "-") 
     If IsDate(DateIn) Then 
     'Debug.Assert False 
      DateOut = DateValue(DateIn) 
      MyDateValue = True 
      Exit Function 
     End If 
     End If 
    End If 
    Else 
    ' Debug.Assert False 
    ' Use IsDate for other formats 
    If IsDate(DateIn) Then 
     ' Debug.Assert False 
     DateOut = DateValue(DateIn) 
     MyDateValue = True 
     Exit Function 
    Else 
     ' Debug.Assert False 
     MyDateValue = False 
    End If 
    End If 

End Function 
관련 문제