Текстовое поле формы пользователя - формат даты для Великобритании - PullRequest
0 голосов
/ 08 мая 2020

Вечер

У меня есть форма пользователя с некоторыми текстовыми полями, которые являются датами. В электронной таблице формат даты - это формат даты в Великобритании (дд / мм / гггг). Когда текстовое поле вызывает информацию из электронной таблицы, оно преобразует ее в международный формат даты (мм / дд / гггг).

Все Я пытаюсь потерпеть неудачу, любая помощь будет принята с благодарностью.

Заранее большое спасибо.

1 Ответ

1 голос
/ 08 мая 2020

Вероятно, текстовое поле форматирует дату в американском стиле мм / дд / гггг , потому что этот формат определен в региональных настройках вашего компьютера. Один простой способ изменить это - изменить региональные настройки на формат Short Date .

Однако вы можете поделиться этой пользовательской формой с другими. И нет гарантии, что их региональные настройки будут настроены таким же образом.

Итак, если ваша форма всегда должна использовать британский формат, независимо от настроек пользователя, вы можете написать такую ​​функцию форматирования:

Public Function FormatDate(TheValue As Date) As String

    Dim dateSeparator As String
    dateSeparator = "/"

    FormatDate = Format(Day(TheValue), "00") & dateSeparator & _
        Format(Month(TheValue), "00") & dateSeparator & _
        Year(TheValue)

End Function

И используйте это примерно так:

MyUserForm.MyTextBox.Value = FormatDate(inputDateValue)

Если вам нужно преобразовать этот формат обратно в дату, вы можете создать такую ​​функцию:

Public Function UKTextToDate(DateText As String) As Date

    Dim yearPart, monthPart, dayPart As String

    ' Remember that in VBA, String indexes are 1-based, not 0-based!
    ' UK format: dd/mm/yyyy - year starts at position 7 and runs for 4 characters
    yearPart = Mid(DateText, 7, 4)
    ' month starts at position 4 and runs for 2 characters
    monthPart = Mid(DateText, 4, 2)
    ' day starts at position 1 and runs for 2 characters
    dayPart = Left(DateText, 2)

    ' We should convert the text values back to integers, in order to use them
    ' in the DateSerial function.
    UKTextToDate = DateSerial(CInt(yearPart), CInt(monthPart), CInt(dayPart))

End Function

Однако имейте в виду, что приведенное выше не проверяет недопустимый ввод. Если пользователи могут просто вводить что угодно, вам нужно будет написать код, чтобы защититься от этого.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...