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

时间:2013-11-27 11:18:39

标签: 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

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

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

例如:

Add Job Subform - formats not being applied correctly below record 1

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

然而,在第二条记录中,"开始"文本框为0,应将其旁边的未绑定文本框格式化为灰色,并使用字符串"无"。但正如你所看到的那样,只是复制第一条记录的格式。此外,绑定的文本框"结束"值为1,应使其旁边的未绑定文本框为绿色,带有白色文本和字符串"结束表单"。

是否有可能通过VBA实现我想要的效果?我不认为我可以使用条件格式,因为我希望未绑定的文本框显示数据,例如" Start Forms"和#34;结束形式"取决于它们的绑定文本框对应物。

1 个答案:

答案 0 :(得分:9)

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

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

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