Установить значение столбца для ввода пользователем, ограничить формат даты - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно, чтобы появилось всплывающее окно с просьбой ввести дату. Я хочу убедиться, что можно загружать только даты в формате ДД / ММ / ГГГГ.

Приведенный ниже код работает, однако он позволяет вставлять любой тип ввода:

Call RunSQL("UPDATE Summary " & _
    "SET " & _
    "Date_of_Report = [Enter the Report date in the following format DD/MM/YYYY, with the DD being the last day of the month] " & _
    " WHERE Date_of_Report IS NULL ")

I также хочу включить имя файла, который обновляется, в подсказку, которую я пытался сделать следующим образом (где FileNameSelected - это переменная, которая будет каждый раз содержать другое значение), но получить сообщение об ошибке:

Call RunSQL("UPDATE Summary " & _
    "SET " & _
    "Date_of_Report = [Enter the Report date for the '" & FileNameSelected & "' file in the following format DD/MM/YYYY, with the DD beng the last day of the month] " & _
    " WHERE Date_of_Report IS NULL ")

Я был бы очень признателен, если бы кто-нибудь мог сказать мне, как установить параметры для формата, а также включить значение переменной FileNameSelected в приглашение.

Также для всплывающих окон VBA я знаю, что вы используете & vbCrLf & _ для создать новую строку для окна сообщения, как мне сделать это с помощью приглашения?

1 Ответ

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

Вот так я бы подтвердил вашу дату. Было бы намного проще с форматом ММ / ДД / ГГГГ. С DD / MM вы должны полностью справиться с этим, иначе вы рискуете, что Access смешает месяцы и дни.

Public Sub Test_date_prompt()


    Dim strInpput As String
    Dim dtConverted As Date
    Dim OK As Boolean
    Dim FileNameSelected As String

    On Error GoTo Err_handler

    OK = False


    FileNameSelected = "Anything for this example"

    strinput = InputBox("Enter the Report date for the '" & FileNameSelected & "' file in the following format DD/MM/YYYY, with the DD being the last day of the month", "Enter date")

    ' testing if user inputed 10 characters
    If Len(strinput) = 10 Then
        ' testing if / separators are at the right place
        If Mid(strinput, 3, 1) = "/" And Mid(strinput, 6, 1) = "/" Then
            ' testing if DD, MM, YYYY placeholders are all numeric
            If IsNumeric(Left(strinput, 2)) And IsNumeric(Mid(strinput, 4, 2)) And IsNumeric(Right(strinput, 4)) Then
                'looks good
                OK = True
            End If
        End If
    End If

    If Not OK Then
        ' not good, abording process
        MsgBox "You have not entered a valid date in DD/MM/YYYY format !", vbExclamation, "Abording"
        GoTo Exit_Sub
    End If

    ' Converting in date which ensure a valid date, otherwise an error will occur
    dtConverted = DateSerial(Right(strinput, 4), Mid(strinput, 4, 2), Left(strinput, 2))


    ' if your Date_of_report type is DATE, do :
'    Call RunSQL("UPDATE Summary " & _
        "SET " & _
        "Date_of_Report = #" & Format(dtConverted, "MM/DD/YYYY") & "# " & _
        " WHERE Date_of_Report IS NULL ")

    ' if your Date_of_report type is STRING (bad!), do :
 '   Call RunSQL("UPDATE Summary " & _
        "SET " & _
        "Date_of_Report = '" & Format(dtConverted, "DD/MM/YYYY") & "' " & _
        " WHERE Date_of_Report IS NULL ")



Exit_Sub:
    Exit Sub

Err_handler:
    MsgBox Err.Description
    Resume Exit_Sub

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