是否有事件在将MSSe中的控件发送到表中的验证之前更改它的值

问题描述 投票:0回答:1

我有一个带有相关日期时间列的日期字段,我希望能够输入相对日期字符串,例如“m + 1”,以便输入从今天起一个月的日期。是否有一个事件可以挂钩到我可以编写VBA代码的地方,该代码将解释并将字段值更改为验证将理解的实际日期,然后再将其发送到验证?

我似乎无法找到这样的事件,即使BeforeUpdate太火了。在"The value you entered isn't valid for this field."触发之前,我收到了BeforeUpdate错误消息。

vba ms-access access-vba
1个回答
0
投票

您可以使用控件的按键事件。并且要吹灭(从访问控制中取消按键没有看到密钥,然后设置keycode = 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
© www.soinside.com 2019 - 2024. All rights reserved.