Измените формат даты после загрузки ее в текстовое поле UserForm.

StackOverflow https://stackoverflow.com//questions/22071452

  •  23-12-2019
  •  | 
  •  

Вопрос

У меня есть пользовательская форма с текстовым полем.Когда текстовое поле инициализируется, оно заполняется фактической датой.Я хочу заполнить его пользовательским форматом даты = DD-MM-YYYY

Я написал код ниже, и что-то в нем не так, но я понятия не имею, что не так.Код имеет msgbox перед вставкой значения, MsgBox показывает дату в произвольном формате, но когда она передается textbox.value это как M/DD/YYY.

Dim year As Long, year_control As Date

year = Format(Date, "yyyy")
year_control = Format(Date, "dd-mm-yyyy")

MsgBox (year_control)

textbox.Value = year_control

(...)

If year_control < "01-04-" & year Then
    Me.Controls("rok1").Value = True
Else
    Me.Controls("rok2").Value = True
End If
Это было полезно?

Решение

Вы не можете «отформатировать» переменную даты:

year_control As Date
year_control = Format(Date, "dd-mm-yyyy")

Приведенный выше код ничего не делает, поскольку переменная Date просто скрывает дату, а точнее, VBA хранит переменные Date как 64-битные (8-байтовые) числа с плавающей запятой IEEE, которые представляют даты в диапазоне от 1 января 100 до 31 декабря 9999 года и время от 0. :00:00 до 23:59:59.

Независимо от того, что вы делаете с этой переменной, она всегда будет отображать даты в соответствии с коротким форматом даты, распознаваемым вашим компьютером.Время отображается в соответствии с форматом времени (12-часовым или 24-часовым), распознаваемым вашим компьютером.

Таким образом, хотя вы можете изменить внутреннее значение, хранящееся в Date Переменная, вы не можете сохранить ее формат внутри одной и той же переменной.

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

Dim year As Long, year_control As Date
Dim strYear_control As string


year = Format(Date, "yyyy")
year_control = Format(Date, "dd-mm-yyyy")
strYear_control = Format(year_control , "dd-mm-yyyy")
MsgBox (strYear_control)

textbox.Value = strYear_control

Это должно работать так, как вы ожидаете.Как Format() функция вернет вариант (строку), содержащий выражение, отформатированное в соответствии с инструкциями, содержащимися в выражении формата.

В качестве примечания вы также можете использовать

Format$(year_control , "dd-mm-yyyy")

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top