2

我会假设很多东西......

我想知道是否有办法在 Access 的条件格式中格式化所有空白字段。在我的情况下,通常需要输入所有字段,但并非在所有情况下都需要输入。因此,与其编写一堆条件代码来限制用户在其中写入,我只想在我的字段中添加一些红色背景以提醒“嘿,这里什么都没有……确定这就是你想要的吗?”

它在平板电脑上,所以消息框会很烦人。所以它是条件格式。我知道你可以有“Is Null([Field]) 但这需要我在 30 多个字段上浏览我的 20 多个表单并确保正确的字段名称等,然后分别为它们键入条件。有没有办法我可以简单地多选我的字段,在 Multiple 上执行条件格式,并使用“Is Equal To: NULL”?

我试过“equal to: Null”但它不起作用..“equal to:”也不行"(使用 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 和内置条件都有缺陷,似乎是一个错误。或者我在我面前错过了一些东西..

4

3 回答 3

3

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

在此处输入图像描述

于 2018-05-26T12:10:27.980 回答
2

将默认格式设置为希望零长度数据出现的方式。采用

Field Value Is greater than ''

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

条件格式截图

您可以在设计视图中按住 Shift 并单击来选择多个字段,以选择需要应用到的所有相应字段

于 2012-05-22T19:17:48.793 回答
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(...). 完全按照我现在想要的方式工作。

于 2012-05-23T12:18:34.640 回答