Изменение функции даты ДД-ММ-ГГГГ на вывод ММ-ДД-ГГГГ - PullRequest
0 голосов
/ 10 мая 2019

Я настраиваю пользовательскую форму для сотрудников, чтобы заполнять данные. Они должны заполнить дату как DD-MM-YYYY, выходные данные также должны быть DD-MM-YYYY. Однако код, который я использую, изменяет ввод 5-12-2019 (ДД-ММ-ГГГГ) на вывод 12-5-2019 (ММ-ДД-ГГГГ). В пользовательской форме он остается на уровне (ДД-ММ-ГГГГ), ожидаемом при переносе его на лист Excel. Если месяц больше 13, он не меняется, поэтому ввод 13-12-2019 (ДД-ММ-ГГГГ) остается выводом 13-12-2019 (ДД-ММ-ГГГГ). Как это возможно, что код изменяет вывод, но не каждый раз одинаково, я сделал что-то не так в коде?

Private Sub TextBox1_BeforeUpdate(ByVal cancel As MSForms.ReturnBoolean)
    If IsDate(Me.TextBox1.Text) Then
        Me.TextBox1.Text = Format(Me.TextBox1.Text, "DD-MM-YYYY")
    Else
        MsgBox "Vul een geldige datum in", vbRetryCancel + vbCritical
    End If

End Sub

Public Function IsTime(Expression As Variant) As Boolean
    If IsDate(Expression) Then
        IsTime = (Int(CSng(CDate(Expression))) = 0)
    End If
End Function

1 Ответ

1 голос
/ 10 мая 2019
  1. Считать дату в виде строки. Например. 5-12-2009.
  2. Разделить строку на -.
  3. 0-е значение - это день, 1-е - месяц, 2-е - год.
  4. Оттуда у вас полностью функционирующая дата, используя DateSerial().

Public Function StringToDate(myInput As String) As Date

    Dim day As Long
    Dim month As Long
    Dim year As Long
    Dim dateArray As Variant

    dateArray = Split(myInput, "-")
    day = dateArray(0)
    month = dateArray(1)
    year = dateArray(2)

    StringToDate = DateSerial(year, month, day)

End Function

Public Sub Main()

    Debug.Print month(StringToDate("05-10-2001"))
    Debug.Print StringToDate("05-10-2001")

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