MS Access 子表单条件格式基于 table 上的数据

MS Access Subform conditional format based on data on a table

我的数据库有一个表单视图,供实验室将他们的测试结果输入到我们生产的每批产品中。 我有一个查询作为子表单数据源,我使用日期组合框让实验室人员查看当天的生产。我的问题是,当他们写入测试值时(例如批次 5,产品 A,测试结果 = 10),我需要子表单根据位于另一个 [=34] 中的 min/max 规范进行条件格式化=].假设这个 table 表示产品 A 允许的范围是 11-15。那么当技术人员写10时,应该会提示他对产品进行隔离。一种简单的方法是将 CELL 标记为粗体红色。

这是我的子表单布局:

Product | Batch #  |  Test result

我的规范 sheet 是这样的:

Product | Min | Max

我试过使用DLookup没有成功,可能是语法错误。

关于如何解决这个问题有什么建议吗?

我想到的一个好主意是有一个按钮来自动通知我的质量人员。

谢谢。

Products 中的Autonumber ID 字段设置为主键,但Batch 中的Product 字段是文本。更改为数字长整数类型。这在 [产品规格] table.

中已正确完成

固定该字段类型后,可以在 LabBatchQuery 中包含 [产品规格] table,规格字段将可用于条件格式中的直接引用。

SELECT Batch.*, [Product Specification].*
FROM [Product Specification] RIGHT JOIN Batch ON [Product Specification].[Product Code] = Batch.Product
WHERE (((Batch.[Production Date])=[Forms]![TNA Batch Analysis]![Today Date]));

将 RecordSource 更改为仅引用 LabBatchQuery 而不是 SQL 语句。或者不是在查询对象中使用动态参数(我从不这样做),而是将其放在 RecordSource SQL 语句中。 SELECT * FROM LabBatchQuery WHERE [Production Date]=[Forms]![TNA Batch Analysis]![Today Date];

条件格式规则如下:Value Is Not Between [pH Min] And [pH Max]

将更新后的 [今天日期] 文本框代码更改为:Me.[LabBatchQuery subform].Requery

建议不要在命名约定中使用空格或 punctuation/special 个字符(下划线除外)。

还建议不要在 table 秒内设置查找。

如果 Products 和 [Product Specification] 是一对一的关系,为什么不合并为 1 table?

您可以使用Form_BeforeUpdate来验证/条件格式化数据

如果 PH 值超出产品规格 table 中定义的范围,下面的代码将限制 PH 值。同样,您可以为其他字段定义。

将此代码放入您的子表单:


Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim pH_Min As Double, pH_Max As Double

    If Nz(Product, -1) <> -1 And Nz(Me.Batch__, "") <> "" And Nz(Me.pH, -1) <> -1 Then

        pH_Min = DLookup("[pH Min]", "Product Specification", "[Product Code]=" & Product)
        pH_Max = DLookup("[pH Max]", "Product Specification", "[Product Code]=" & Product)


        If Me.pH.Value >= pH_Min And Me.pH.Value <= pH_Max Then
            'no action
        Else
            MsgBox "Invalid Value", vbInformation
            Cancel = True
        End If

    End If
End Sub