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

Ms access 使用VBA格式化子窗体记录中的字段,ms-access,vba,Ms Access,Vba,我正在尝试使用VBA格式化一些未绑定的文本框,这些文本框已添加到设置为“连续视图”的子窗体上的行中 VBA查看与子窗体的底层记录源关联的绑定文本框,然后根据数据格式化我添加的未绑定文本框 下面是一些简化的代码: 公共子应用程序格式() 如果形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!开始=1那么 形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart.BackColor=RGB(65138179) 形式!特布莱恩茨!tblEnrolm

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

VBA查看与子窗体的底层记录源关联的绑定文本框,然后根据数据格式化我添加的未绑定文本框

下面是一些简化的代码:

公共子应用程序格式()
如果形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!开始=1那么
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart.BackColor=RGB(65138179)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart.ForeColor=RGB(255、255、255)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart=“启动表单”
其他表格!特布莱恩茨!tblEnrolments\u Jobs\u sub!开始=0那么
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart.BackColor=RGB(216、216、216)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart.ForeColor=RGB(166、166、166)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtStart=“无”
如果结束
如果形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!结束=1那么
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtEnd.BackColor=RGB(8164,71)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtEnd.ForeColor=RGB(255、255、255)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtEnd=“结束形式”
其他表格!特布莱恩茨!tblEnrolments\u Jobs\u sub!结束=0那么
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtEnd.BackColor=RGB(216、216、216)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtEnd.ForeColor=RGB(166、166、166)
形式!特布莱恩茨!tblEnrolments\u Jobs\u sub!txtEnd=“无”
如果结束
端接头
专用子表单_Activate()
应用格式
端接头
私有子表单_当前()
应用格式
端接头
因此,我有一个名为ApplyFormat的公共子组件,它查看绑定文本框中的数据,然后应用格式(更改文本框背景颜色、字体颜色和文本数据)。然后从当前事件(因此在加载记录时应用格式)和激活事件(因为主窗体将在其他窗体仍处于打开状态时打开其他窗体,并且在这些其他窗体关闭时可能再次获得焦点)调用

不幸的是,子窗体中记录1以下的记录未根据其记录中的数据进行格式化;它们只是简单地复制应用于第一条记录的格式

例如:

此处EnrolID“1”有2个附加作业显示在子窗体中。根据上述代码,第一条记录的格式正确,即绑定的“开始”文本框为1,因此其旁边的未绑定文本框的格式为蓝色,带有白色文本和字符串“开始形式”

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


有没有可能通过VBA达到我想要的效果?我不认为我可以使用条件格式,因为我希望未绑定的文本框根据其绑定的文本框对应项显示“开始表单”和“结束表单”等数据。

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

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

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