首页 > 解决方案 > MS Access db,VBA 表单动态默认值条件

问题描述

我正在使用下面的表格,不确定我是否可以实现这个逻辑:

在此处输入图像描述

Start Date = Now();

If Expedited  then Exp_Date = Start_Date + 72 hours 
else Exp_Date = Start_Date + 30 days.

我将此表达式用作默认值,但看起来在评估时它并不关心 ExpeditedYN 中的值。

=IIf([ExpYN]=True,DateAdd("h",72,Now()),DateAdd("d",30,Date()))

理想情况下,我想翻转 Exp.Date 默认单击 Expedited 框,这在 VB 中是否可用。试过 DLookUp (D --> Dynamic??) 但它不起作用

DLookUp(IIf([ExpYN]=True,DateAdd("h",72,Now()),DateAdd("d",30,Date())))

在此处输入图像描述 Tx 戴

标签: ms-accessvba

解决方案


在默认值中使用IIfDLookup引用同一记录上的另一个字段不会让您有任何收获,因为 Access 只会在首次启动新记录时询问默认值要填写什么值。这意味着它将基于其他字段的默认值,因此不会响应任何用户输入。

我建议您保留两者的默认值StartDateDeadlineDate简单,类似于您已经是这样:

StartDate的默认值:Now()

DeadlineDate的默认值:DateAdd("d",30,Now())

然后在更改 Expedited 时在代码中更改它。有几种方法可以做到这一点,我可能会将它放在复选框的更新前事件中,因此它无需移出记录即可运行。如果您以后可能希望能够更改记录,您也可以基于 StartDate 字段。您可以使用 Access 的宏生成器来构建它,但在这里向您展示 VBA 会更容易:

If ExpYN Then
    DeadlineDate = DateAdd("h", 72, StartDate)
Else
    DeadlineDate = DateAdd("d", 30, StartDate)
End If

如果您希望探险过程基于单击按钮的时刻而不是 中的 DateTime 数据StartDate,只需将StartDate(或调用该字段的任何内容)更改为Now().


推荐阅读