VBA 根据答案有条件地改变表格背景颜色的代码

VBA code that changes background color of form conditionally by answer

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

一些信息: 我希望它基于的字段是数字,称为 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

我也设法通过一段非常不同的代码来做我想做的事情,但它的工作方式似乎改变了所有表格的状态,而不仅仅是我目前的状态一起工作,这是目标。因此,例如,如果我在 starter 中输入 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

编辑: 好吧,我很尴尬地找到了解决方案。这不是一个非常整洁的,但它有效。

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

我知道这是一个非常老的问题(可能你已经用更好的方法解决了)但无论如何我都会试一试。

尝试以下操作:

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

编辑: 我试过了,我认为它现在可以正常工作了。 当您更改文本框上的 text 时每次都会触发此事件,运行 Sub,检查它自己的 text 并更改表单的颜色如上所述。

变化是我改变了它检查的字段的属性。从 ValueText。我们希望事件触发时检查当前文本,因为当您 "finish" 使用文本框时值 属性 会更新(在您按回车键或控件失去焦点后),我们希望更改为在我们按下键更改值的同时发生,而不是稍后。

第二个更改和我们之前出现奇怪模式的原因是,当文本为 "" 时,我又添加了一个 Case,以便对该更改不执行任何操作(空 case)。如果没有这种情况,当我们使用 delete 或 backspace 删除文本并将文本框留空 ("") 时,其他情况为 True,它改变了背景颜色。

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