通过回答有条件地改变形式的背景颜色的VBA代码

时间:2016-01-13 22:46:43

标签: vba ms-access access-vba ms-access-2010

我想使用VBA(或其他解决方案)根据用户在数字字段中输入的数量有条件地更改表单的背景颜色。基本上,在他们输入Starter问题的答案之后,如果他们输入1,那么我希望表单背景更改为特定的蓝色阴影,如果他们输入2,那么我希望表单背景更改为特定的绿色阴影。我在这里看到的代码看起来与我在另一个问题中的需求非常相似,但是我无法弄清楚如何使代码工作,并且无法确定如何/在何处放置每个代码模块。

一些信息: 我希望它基于的字段是数字,称为Starter,通过数据验证,用户只能输入1,2,9,或将其留空。我只希望颜色在输入为1或2时改变。

我正在使用Access 2010

表单既没有页眉也没有页脚

我试图使用的代码并做了一些修改如下:

Private Sub Form_AfterUpdate()
blue_yes = "15325906"
green_no = "13888226"

Dim colorThis As String

booWhatever = Me.Starter  ''Use of the variable can prevent problems

If booWhatever = 1 Then
colorThis = "blue_yes"
End If
If booWhatever = 2 Then
colorThis = "green_no"
End If
subFrm.Form.Section(acDetail).BackColor = colorThis

subFrm.Form.Repaint
End Sub

我还管理过一段完全不同的代码,按照我想要的方式进行操作,但它的工作方式似乎改变了所有表单的状态,而不仅仅是一个我目前正在与之合作,这是我的目标。因此,例如,如果我为启动器输入2,它会更改每个记录的形式的背景颜色。

Private Sub Starter_AfterUpdate()
If Me.Starter = "1" Then Me.Detail.BackColor = vbBlue
If Me.Starter = "2" Then Me.Detail.BackColor = vbGreen
End Sub

编辑: Welp,令人尴尬的是我找到了解决方案。它不是很整洁,但它有效。

Private Sub Form_Current()
Dim Presence As String
Presence = Nz(Me.Starter.Value, 9)
Select Case Presence
Case "1"
Me.Detail.BackColor = 15325906
Case "2"
Me.Detail.BackColor = 13888226
Case Else
Me.Detail.BackColor = vbWhite
End Select

End Sub

Private Sub Starter_AfterUpdate()
Dim Presence As String
Presence = Nz(Me.Starter.Value, 9)
Select Case Presence
Case "1"
Me.Detail.BackColor = 15325906
Case "2"
Me.Detail.BackColor = 13888226
Case Else
Me.Detail.BackColor = vbWhite
End Select

End Sub

1 个答案:

答案 0 :(得分:1)

我知道这是一个非常古老的问题(可能你已经用更好的方式解决了它)但我还是试试看。

尝试以下方法:

Private Sub Text0_Change()
    Select Case Me.Text0.Text
    Case ""

    Case "1"
        Me.Detail.BackColor = 15325906
    Case "2"
        Me.Detail.BackColor = 13888226
    Case Else
        Me.Detail.BackColor = vbWhite
    End Select
End Sub

修改 我尝试了它,它现在按照它应该做的方式运行。 当您更改文本框上的文本时,每次都会触发此事件,运行Sub,检查它自己的文本并按照描述更改表单的颜色。

更改是我更改了它检查的字段的属性。从 Value Text 。我们希望当事件触发时检查当前文本,因为当您使用文本框“完成”时,Value属性会更新(在您按下回车或对控件的焦点丢失之后),我们希望更改发生在我们按下的同一时刻改变价值的关键,而不是以后。

第二个变化以及我们之前得到奇怪模式的原因是我在文本“”中添加了一个Case,以便对该更改(空案例)不执行任何操作。没有这种情况,当我们使用删除或退格删除文本并将文本框留空(“”)时,其他情况为True并且它改变了背景颜色。

我希望现在这是正确的答案。请告诉我!