Есть ли событие для изменения значения элемента управления в MS Access перед его отправкой на проверку в таблицу - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть поле даты со связанным столбцом даты и времени, и я хочу иметь возможность ввести строку относительной даты, например, "m + 1", чтобы ввести дату ровно через месяц с сегодняшнего дня. Есть ли событие, к которому можно подключиться, чтобы я мог написать VBA код, который интерпретирует это и изменит значение поля на фактическую дату, которую будет понимать проверка, прежде чем она будет отправлена ​​на проверку?

Кажется, я не могу найти такое событие, даже BeforeUpdate срабатывает слишком поздно. Я получаю сообщение об ошибке "The value you entered isn't valid for this field." до того, как BeforeUpdate сработает.

1 Ответ

0 голосов
/ 04 апреля 2019

Вы можете использовать событие нажатия клавиши элемента управления.И выдуть (убить нажатие клавиши из-за контроля доступа, НЕ видя ключа, затем установите код ключа = 0.

Таким образом, эта процедура позволит пользователю нажать Y или y = добавить или вычесть год D или d= сложение или вычитание дня M или m - добавление или вычитание месяца.

Обратите внимание, что необходимо использовать клавишу Shift - блокировка заглавных букв игнорируется.

Private Sub IvDate_KeyDown(KeyCode As Integer, Shift As Integer)

  Dim strMyKeys     As String
  strMyKeys = "mdy"       ' key check ignores caps
  If InStr(strMyKeys, Chr(KeyCode)) > 0 Then

     If IsNull(Me.IvDate) Then Me.IvDate = Date

     Select Case KeyCode

        Case Asc("M") And (Shift = 1)

           ' Move ahead one month
           Me.IvDate = DateAdd("m", 1, Me.IvDate)
        Case Asc("M")
           ' move bck one month
           Me.IvDate = DateAdd("m", -1, Me.IvDate)
        Case Asc("D") And (Shift = 1)
           Me.IvDate = DateAdd("d", 1, Me.IvDate)
        Case Asc("D")
           Me.IvDate = DateAdd("d", -1, Me.IvDate)
        Case Asc("Y") And (Shift = 1)
           Me.IvDate = DateAdd("yyyy", 1, Me.IvDate)
        Case Asc("Y")
           Me.IvDate = DateAdd("yyyy", -1, Me.IvDate)
     End Select

     KeyCode = 0   ' sends current key to black hole

  End If



End Sub
...