使用VBA格式化子窗体记录中的字段

Mat*_*all 4 ms-access access-vba

我正在尝试使用VBA来格式化一些未绑定的文本框,我已将这些文本框添加到设置为连续视图的子窗体上的行中.

VBA查看与子窗体的基础RecordSource关联的绑定文本框,然后根据数据格式化我添加的未绑定文本框.

这是一些简化的代码:

Public Sub ApplyFormat()

    If Forms!tblEnrolments!tblEnrolments_Jobs_sub!Start = 1 Then

        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.BackColor = RGB(65, 138, 179)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.ForeColor = RGB(255, 255, 255)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart = "Start Forms"

    ElseIf Forms!tblEnrolments!tblEnrolments_Jobs_sub!Start = 0 Then

        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.BackColor = RGB(216, 216, 216)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart.ForeColor = RGB(166, 166, 166)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtStart = "None"

    End If

    If Forms!tblEnrolments!tblEnrolments_Jobs_sub!End = 1 Then

        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.BackColor = RGB(8, 164, 71)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.ForeColor = RGB(255, 255, 255)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd = "End Forms"

    ElseIf Forms!tblEnrolments!tblEnrolments_Jobs_sub!End = 0 Then

        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.BackColor = RGB(216, 216, 216)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd.ForeColor = RGB(166, 166, 166)
        Forms!tblEnrolments!tblEnrolments_Jobs_sub!txtEnd = "None"

    End If

End Sub

Private Sub Form_Activate()

    ApplyFormat

End Sub

Private Sub Form_Current()

    ApplyFormat

End Sub
Run Code Online (Sandbox Code Playgroud)

所以我有一个名为ApplyFormat的公共子,它查看绑定文本框中的数据,然后应用格式(更改文本框背景颜色,字体颜色和文本数据).然后从Current事件调用(因此无论何时加载记录都会应用格式)和Activate事件(因为主窗体将在打开时打开其他窗体,并且当其他窗体关闭时可能再次获得焦点).

不幸的是,子表单中记录1下面的记录没有根据其记录中的数据进行格式化; 它们只是复制第一条记录中应用的格式.

例如:

添加作业子表单 - 格式未在记录1下正确应用

这里EnrolID"1"在子表单中显示2个附加作业.第一条记录按照上面的代码格式化正确,即绑定的"开始"文本框为1,因此其旁边的未绑定文本框格式为蓝色,带有白色文本和字符串"Start Forms".

但是,在第二个记录中,"开始"文本框为0,应将其旁边的未绑定文本框格式化为灰色,字符串为"无".但正如你所看到的那样,只是复制第一条记录的格式.此外,绑定文本框"End"的值为1,这应该使其旁边的未绑定文本框为绿色,带有白色文本和字符串"End Forms".

是否有可能通过VBA实现我想要的效果?我不认为我可以使用条件格式,因为我希望未绑定的文本框显示数据,如"开始表单"和"结束表单",具体取决于它们的绑定文本框对应项.

Hei*_*nzi 9

您不能使用未绑定字段:连续表单中的Unbounds字段在所有行中始终具有相同的格式.这是一个不幸的限制.

幸运的是,还有另一种选择:你可以使用一个调用用户定义函数的绑定字段ControlSource.例如,在Form desginer中,创建一个文本框并将其"control source"属性设置为= Iif([Start] = 1, "Start Forms", "None")(包括=开头的符号).格式化必须通过条件格式化完成.

如果需要更复杂的逻辑来确定要显示的文本,可以将控制源设置为= myCustomFunction([any], [dbfields], [I], [need])并使VBA代码返回要显示的文本.