我希望访问数据表表单中的某些记录闪烁(从一种颜色切换到另一种颜色),具体取决于给定字段中的值。
我通过使用表单的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
答案 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秒,它显然会减慢(有时会崩溃)数据库。
虽然有些人可能认为制作闪光灯并不是最好的方法,但我仍然希望自己能够实现,所以如果您有任何想法我可以让它正常工作让我知道。
这就是我所做的:
在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