是否为空条件格式 - MS Access Forms

时间:2012-05-22 13:51:59

标签: forms ms-access formatting conditional

我会想到的东西会出现很多......

我想知道在Access'条件格式化中是否有办法格式化所有空白字段。在我的情况下,通常需要输入所有字段,但并非在所有情况下。所以,不是写一堆条件代码来限制用户在那里写它,我只是想在我的字段中有一些红色背景作为提示“嘿,这里什么都没有......确定那就是你想要的?” />它在平板电脑上,所以消息框会很烦人。所以条件格式化它。我知道你可以拥有“Is Null([Field])但是这需要我在30多个字段中查看我的20多个表单并确保正确的字段名称等,然后单独为它们键入条件。有没有办法我可以简单地多选我的字段,在Multiple上执行条件格式,并使用“Is Equal To:NULL”?

我试过“等于:Null”并且它不起作用..也不是“等于:”“”(使用Access常量)。想法为什么?或者我如何解决这个问题?此外,它只需要非触摸字段,所以如果用户开始输入然后删除回空白,我不在乎;它可以保持未格式化或重新变为红色,所以如果有更好的方法可以做到这一点我就是所有的目光。

编辑:我已经开始做一些VBA代码,我将粘贴到我的所有表单中:

Private Sub Form_Load()
Dim ctl As Control
Dim reqCol As Long
Dim focusCol As Long
Dim doneCol As Long
Dim format As FormatCondition

reqCol = RGB(246, 180, 180)
focusCol = RGB(252, 249, 238)
doneCol = RGB(255, 255, 255)

For Each ctl In Me.Controls
    With ctl
        Me.Controls(ctl.Name).FormatConditions.Delete 'Delete the existing conditions.
        Me.Controls(ctl.Name).BackColor = doneCol 'Set the background color to the done color.

        Select Case .ControlType
            Case acTextBox
                'Create the format objects.
                format = Me.Controls(ctl.Name).FormatConditions.Add(acFieldValue, acEqual, "")
                format = Me.Controls(ctl.Name).FormatConditions.Add(acFieldHasFocus)

                'Format the filled in boxes (ie set back to red)
                With Me.Controls(ctl.Name).FormatConditions(0)
                    .BackColor = reqCol
                    .Enabled = True
                End With

                'Format the current field color (ie set to beige)
                With Me.Controls(ctl.Name).FormatConditions(1)
                    .BackColor = focusCol
                    .Enabled = True
                End With
        End Select
    End With
Next ctl
End Sub

问题是FormatConditions.Add(acFieldValue, acEqual, "")由于同样的原因不起作用......我该如何解决这个问题?看到VBA和内置条件都有缺陷,看起来像一个bug。或者我在我面前丢失了一些东西..

3 个答案:

答案 0 :(得分:2)

在Access 2016中,我无法找到@SeanC提供的解决方案的默认格式选项。相反,我发现要使我的组合框格式化,我必须使用带有ISNULL的表达式。

enter image description here

答案 1 :(得分:1)

将默认格式设置为希望显示零长度数据的方式。 使用

Field Value Is greater than ''

用于条件格式设置,并将该格式设置为字段在文本中的显示方式。

Screenshot of conditional formatting

您可以在设计视图中使用Shift +单击选择多个字段,以选择需要应用于此的所有相应字段

答案 2 :(得分:0)

解决。把它放在我的表格中(可能会考虑将其作为一个模块;对此有所了解,还不确定如何)

Private Sub Form_Load()
On Error Resume Next

Dim ctl As Control
Dim reqCol As Long
Dim focusCol As Long
Dim doneCol As Long
Dim format As FormatCondition
Dim expr As String

reqCol = RGB(246, 180, 180)
focusCol = RGB(252, 249, 238)
doneCol = RGB(255, 255, 255)

For Each ctl In Me.Controls
    With ctl
        'Delete the existing formatting
        Me.Controls(ctl.Name).FormatConditions.Delete
        Me.Controls(ctl.Name).BackColor = doneCol

        Select Case .ControlType
            Case acTextBox
                expr = "IsNull(" & ctl.Name & ") = True"
                'Create the format objects.
                format = Me.Controls(ctl.Name).FormatConditions.Add(acFieldHasFocus)
                format = Me.Controls(ctl.Name).FormatConditions.Add(acExpression, , expr)

                'Format the filled in boxes (ie set back to focus color)
                With Me.Controls(ctl.Name).FormatConditions(0)
                    .BackColor = focusCol
                    .Enabled = True
                End With

                'Format the current field color (ie set to required color)
                With Me.Controls(ctl.Name).FormatConditions(1)
                    .BackColor = reqCol
                    .Enabled = True
                End With
        End Select
    End With
Next ctl
End Sub

诀窍是如何将其输入FormatConditions.Add(...)。完全符合我现在的喜好。