2017-03-03 102 views
0

我正在使用MS Access 2010中的表单将数据输入到表中。我已经设置了基本功能,并添加了一些VB代码来根据需要进行格式化。我试图做的事情之一是更新tickbox值的标签 - 选择该tickbox时 - 使用下面的代码工作,但是当我点击“添加记录”时,标签上的格式仍然保留,而不是像数据一样清除项目 - 我不能解决如何修改这个工作,我相信我将不得不添加一个循环或修改添加记录按钮,但我不知道从哪里开始(有30多个标签和tickbox如果有一个快速的方法,而不必参考所有优先考虑的标签)。我的第二个问题是因为我使用'AfterUpdate',当我使用表单查看已添加的记录时,由于没有单击tickbox,所以格式不会随着值的变化而变化。MS Access - 格式化标签

Private Sub TextBox1Name_AfterUpdate() 

    Const LightYellow = 10092543 
    If TextBox1Name = -1 Then 
     Me.Label1Name.BackStyle = 1 
     Me.Label1Name.BackColor = LightYellow 
    Else 
     Me.Label1Name.BackStyle = 0 
    End If 
End Sub 

任何帮助或方向将非常赞赏与此。

+0

您使用的是连续表单吗?检查控件类型可以做很多事情。考虑一下,你已经有了真假,所以你可能不需要if和else。 – Fionnuala

+0

你的第二个问题很简单 - 只需添加一个'Form_Current'事件来根据需要设置/重置标签。至于'点击'添加'按钮后'重新设置30多个标签...',您可以通过所有Me.Controls循环查找复选框类型并重置,或者手动重置20多行代码(Boo!)这是识别具有有意义控件名称(例如chkLarge,chkSmall等)的价值的好地方,因为您可以使用代码来查找名称以及控件类型。 –

回答

0

您必须在3个不同的场合进行TextBox1Name的格式化。当一个记录被更新(因为你有),当窗体上的记录被改变(也就是OnCurrent事件),或者当您添加一个新的记录(这是你的新记录按钮OnClick事件。

的这样,我会做的是创建的代码非常相似,你有什么上面,然后调用私有子,如果从所有3个事件真的有必要,唯一的变化是:

If Nz(TextBox1Name,0) = -1 Then 

如果您TextBox1Name有一个默认值空而不是其他东西

这当然适用于非连续的形式。连续形式的事情有点棘手。在这种情况下,你最好的选择是条件格式。实际上,甚至可以使用条件格式,而不是使用VBA,而是使用单个表单。

+0

这是完美的谢谢你。工作过一种享受! –