微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Access,VBA根据位于表单记录源上的表中的复选框值更改表单上按钮的颜色

如何解决Access,VBA根据位于表单记录源上的表中的复选框值更改表单上按钮的颜色

我正在为水产养殖部门创建一个数据库。在一个表单中,我为每个存在的“池”放置了按钮:

Form interface

所以你明白了,按钮有以下代码,这些代码转发到另一个包含关于给定池的特定信息的表单:

Private Sub cmd2_Click()
    On Error GoTo cmd2_Click_Err
    codBaseNum = "AT 1/2"

DoCmd.OpenForm "InfoBotonTanque",acnormal,"","[Base-Número]=""AT 1/2""",acLast

cmd2_Click_Exit:
    Exit Sub

cmd2_Click_Err:
    MsgBox Error$
    Resume cmd2_Click_Exit

End Sub

基于表上的两个不同复选框,其中包含有关各个池的信息,我希望按钮更改颜色。这里是表中的数据:

enter image description here

复选框名称:[Reserva] 和 [Condicion?]。 [Base-Número] 是池 ID。所有三个值都在表单的 RecordSource 中:

enter image description here

编辑: 设法实现了我想要的:按钮根据 CheckBox 值更改颜色!下面的代码不优雅,因为我必须为每个按钮输入相同的小改动,大约有 150 个,但它有效......使用的代码是:

Private Sub Form_Load()    
If DLookup("[Reserva]","Tanques","[Base-Número] = 'AT 1/2'") = True And DLookup("[Condicion?]","[Base-Número] = 'AT 1/2'") = False Then
    Me.cmd2.BackColor = RGB(255,215,0)
ElseIf DLookup("[Reserva]","[Base-Número] = 'AT 1/2'") = False And DLookup("[Condicion?]","[Base-Número] = 'AT 1/2'") = True Then
    Me.cmd2.BackColor = RGB(255,"[Base-Número] = 'AT 1/2'") = False Then
    Me.cmd2.BackColor = RGB(51,171,249)
Else
    Me.cmd2.BackColor = RGB(120,120,120)
End If
End Sub

解决方法

为了不重复代码 150 次,请使用一个循环来构造命令按钮名称以及带有变量的 [Base-Número] 参数。考虑:

Private Sub Form_Load()
Dim x As Integer
For x = 1 to 150
    If DLookup("[Reserva]","Tanques","[Base-Número] = 'AT 1/" & x & "'") = True _
               And DLookup("[Condicion?]","[Base-Número] = 'AT 1/" & x & "'") = False Then
        Me("cmd" & x ).BackColor = RGB(255,215,0)
    ElseIf DLookup("[Reserva]","[Base-Número] = 'AT 1/" & x & "'") = False _
               And DLookup("[Condicion?]","[Base-Número] = 'AT 1/" & x & "'") = True Then
        Me("cmd" & x).BackColor = RGB(255,"[Base-Número] = 'AT 1/" & x & "'") = False Then
        Me("cmd" & x).BackColor = RGB(51,171,249)
    Else
        Me("cmd" & x).BackColor = RGB(120,120,120)
    End If
Next
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。