访问表单数据表中的闪烁行

时间:2017-07-11 13:20:15

标签: vba forms ms-access access-vba conditional-formatting

我希望访问数据表表单中的某些记录闪烁(从一种颜色切换到另一种颜色),具体取决于给定字段中的值。

我通过使用表单的On Timer事件在there找到了一些很好的帮助,但由于某种原因它对我不起作用。 我想这是因为在我的情况下,我的表单显示在数据表视图

另外,我意识到它只检查活动记录的值但是我想检查该给定字段的所有记录的值(通过SQL可能?)

是否可以通过VBA中的VBA更改记录的背景颜色,或者唯一的方法是通过条件格式设置工具?

我对如何继续以及是否有办法这样做感到有点困惑。

关于如何做到这一点的任何想法?

Private Sub Form_Timer()

   If [Receiver] = "Martin" Then
       If [Receiver].ForeColor = 0 Then 'vbRed
          [Receiver].ForeColor = 255 'vbBlack
       Else
          [Receiver].ForeColor = 0 'vbRed
       End If
   End If

End Sub

2 个答案:

答案 0 :(得分:0)

将以下内容添加到表单的代码文件中,假设您需要flash的TextBox控件名为 txtReceiver

Private Sub Form_Load()
    Me.TimerInterval = 500
End Sub

Private Sub Form_Timer()
    With Me.txtReceiver
        If .BackColor = vbRed Then
            .BackColor = vbBlack
            .ForeColor = vbWhite
        Else
            .BackColor = vbRed
            .ForeColor = vbBlack
        End If
    End With
End Sub

以上将BackColor / ForeColor设置为名为 txtReceiver 所有 TextBox控件,因此您需要设置条件格式以进行调整:

规则:场地价值不等于马丁 BackColor:白色
ForeColor:黑色

所有名为 txtReceiver 的TextBox控件的值为“Martin”现在将闪烁。

答案 1 :(得分:0)

我找到了一种方法让它“闪光”,但颜色更新大约。非常10秒,它显然会减慢(有时会崩溃)数据库。

虽然有些人可能认为制作闪光灯并不是最好的方法,但我仍然希望自己能够实现,所以如果您有任何想法我可以让它正常工作让我知道。

这就是我所做的:

  1. 我创建了一个额外的字段 Random ,它存储“是”或“否”
  2. 在表单的条件格式中,我写了这个:
  3. 在On Timer事件中,我将它链接到以下代码,其中最后一部分仅在循环中运行:

    Function AWBInput()
    Dim i As Integer
    Dim NewRandom As String
    
    Dim conn As New ADODB.Connection
    Dim connStr As String
    Dim rs As ADODB.Recordset
    
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & "P:\MyPath\" & "PartsTLC.accdb" & ";"
    conn.ConnectionString = connStr
    conn.Open
    
    ' Store Random
        Dim RandomSQL As String
        Dim arrayRandom() As Variant
        Set rs = New ADODB.Recordset
        RandomSQL = "SELECT [Random] FROM List"
        rs.Open RandomSQL, conn, adOpenStatic, adLockReadOnly, adCmdText
        If Not rs.EOF Then
            arrayRandom = rs.GetRows
        End If
        Set rs = Nothing
    
    ' Store ID
        Dim IDSQL As String
        Dim arrayID() As Variant
        Set rs = New ADODB.Recordset
        IDSQL = "SELECT [ID] FROM List"
        rs.Open IDSQL, conn, adOpenStatic, adLockReadOnly, adCmdText
        If Not rs.EOF Then
            arrayID = rs.GetRows
        End If
        Set rs = Nothing
    
    
    Dim NumberOfFlashes As Integer
    Dim WaitUntil
    ANouveau:
    
    'WaitUntil = Now + TimeValue("00:00:5")
    '    Do
    '        DoEvents
    '    Loop Until Now >= WaitUntil
    NumberOfFlashes = NumberOfFlashes + 1
    Screen.ActiveForm.Refresh
    Do
    For i = 0 To UBound(arrayRandom, 2)
        If arrayRandom(0, i) = "Yes" Then
                        NewRandom = "No"
                        arrayRandom(0, i) = NewRandom
                        DoCmd.RunSQL "UPDATE List Set [Random] = '" & NewRandom & "' WHERE [ID] = " & arrayID(0, i)
        Else:           NewRandom = "Yes"
                        arrayRandom(0, i) = NewRandom
                        DoCmd.RunSQL "UPDATE List Set [Random] = '" & NewRandom & "' WHERE [ID] = " & arrayID(0, i)
        End If
    Next i
    GoTo ANouveau
    Loop While NumberOfFlashes < 10000
    End Function