根据父表中的记录属性启用/禁用表单列表字段

时间:2017-01-03 18:04:24

标签: forms ms-access access-vba ms-access-2013

我的数据库中有两个表:Add_New_Initiative和Add_Risk

Add_New_Initiative与Add_Risk之间存在1:M的关系。

通过Add_Risk表单添加风险时,用户必须从下拉组合框中选择相关的Initiative_ID。

根据该选择,将启用或禁用Add_Risk表单中名为Risk_Area的值列表。为了确定这一点,我需要通过Initiative_ID查找记录,并查看用户之前为Add_New_Initiative表单中标题为Tier的值列表选择的答案。

从逻辑上讲,我认为它是这样播放的:

  1. 如果Add_Risk表单上的Initiative_ID为Null,则将禁用Risk_Area。
  2. 如果Add_Risk表单上的Initiative_ID不为空,则在Add_New_Initiative表单上查找具有用户在Add_Risk表单上输入/选择的Initiative_ID的记录的Tier值。
  3. 如果Tier为1或2,则将在Add_Risk表单上启用Risk_Area。
  4. 如果Tier为3或Null,则Add_Risk表单上将禁用Risk_Area。
  5. 在VBA中对此进行编码时,如何引用存储在其他表单/表中的Tier值?

1 个答案:

答案 0 :(得分:0)

根据问题,您在查找/引用其他表格中的数据时遇到问题 执行dlookup以查找表/查询中的特定值。

dim VarTier as integer
VarTier = nz(Dlookup("Tier","Add_New_Initiative","Initiative_ID=" & me.Initiative_ID.value),-1)

Dlookup将返回:

  1. 如果找不到匹配条件的记录,则为空,由nz处理,从而使VarTier为-1,因此您可以使用if语句处理它。
  2. 如果找到了Initiative_ID等于Add_Risk表单的记录,它将返回该记录的Tier值。
  3. 然后,您必须将查找结果与简单的if。

    进行比较
    If Vartier = 1 or VarTier = 2 then
        me.list.enabled = true
    End If
    

    关于Dlookup的更多信息 https://msdn.microsoft.com/es-es/library/office/ff834404(v=office.15).aspx