Управление данными из текстового поля и значений инвертированного дня / месяца

Мне нужно проверить, действительна ли дата, введенная в текстовое поле. Он должен быть одним текстовым полем, так что не обойти это. Теперь у меня есть этот код:

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 – ошибка), она инвертирует значения дня и месяца. Вместо этого я хочу, чтобы подчиненный сказал пользователю снова проверить его вход! Вы можете мне помочь? Спасибо!

Существуют различные варианты этого вопроса каждый месяц или около того. Я убежден, что 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 
  • Блокировка TextBox от перемещения и изменения размера листа и только редактирование текста Excel VBA
  • Excel VBA Userform Textbox - выделение изменений, сделанных в разных цветах шрифта
  • Как получить доступ к текстовому блоку, размещенному на листе в модуле VBA?
  • Получить значения для текстового поля из ячейки Excel в C #
  • нажмите клавишу ввода в текстовом боксе, затем перейдите к определенной ячейке
  • Добавление текстовых и текстовых значений в ячейку
  • Добавление текста в текстовое поле
  • Форматирование текстовых полей в форме пользователя
  • Текст текстового поля исчезает при вводе текста Excel VBA - часть 2
  • Определите номер недели, номер месяца, год с момента управления DatePicker в пользовательской форме VBA
  • Как установить текстовое поле в пользовательской форме для дробного значения?
  • Давайте будем гением компьютера.