Вероятно, текстовое поле форматирует дату в американском стиле мм / дд / гггг , потому что этот формат определен в региональных настройках вашего компьютера. Один простой способ изменить это - изменить региональные настройки на формат 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
Однако имейте в виду, что приведенное выше не проверяет недопустимый ввод. Если пользователи могут просто вводить что угодно, вам нужно будет написать код, чтобы защититься от этого.
Надеюсь, это поможет!