2017-07-11 1 views
0

Je souhaite que certains enregistrements de ma feuille de données Access Access clignotent (passage d'une couleur à une autre) en fonction de la valeur d'un champ donné.Lignes clignotantes dans le formulaire d'accès Fiche technique

J'ai trouvé de l'aide sur there en utilisant l'événement On Timer du formulaire mais pour une raison quelconque cela ne fonctionne pas pour moi. Je suppose que c'est parce que dans mon cas, mon formulaire est affiché dans Fiche technique Voir.

En outre, je me suis aperçu qu'il ne vérifie que la valeur de l'enregistrement actif, mais je voudrais pour vérifier la valeur de tous les enregistrements de ce champ donné (via SQL peut-être?)

Est-il même possible de changer la couleur arrière d'un enregistrement via VBA dans Access ou le seul moyen est via l'outil de mise en forme conditionnelle?

Je suis un peu confus sur la façon de procéder et s'il y a même un moyen de le faire.

Des idées sur comment faire cela?

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 
+1

S'il vous plaît noter qu'il ya une raison pour laquelle les navigateurs Web [ne supportent pas] (https://developer.mozilla.org/en/docs/Web/HTML/Element/blink) 'plus ' plus - il était super ennuyeux. Je suggère un formatage conditionnel régulier avec des couleurs qui ressortent. – Andre

+0

Oui, je comprends votre point, mais il ne clignote pas comme indiqué dans votre lien (c'est ennuyeux je l'admets). Je veux passer de la lumière au bleu foncé et vice versa à chaque seconde. La raison en est que j'ai déjà 5 couleurs sur mon formulaire et à un moment donné ça devient salissant c'est pourquoi j'ai pensé à la chose clignotante – Seb

Répondre

0

Ajoutez ce qui suit au fichier de code de votre formulaire en supposant que le contrôle de la zone de texte que vous devez flash est nommé 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 

Le ci-dessus va régler le BackColor/ForeColor tous contrôles TextBox nommé txtReceiver donc vous devez définir la mise en forme conditionnelle pour l'ajuster:

Règle :                 Champ Valeur est pas égal à Martin
BackColor: Blanc
ForeColor: Noir

Tous les contrôles TextBox nommé txtReceiver avec une valeur de "Martin" se met à clignoter.

+0

Merci pour votre suggestion Kostas, ça marche bien mais vue Formulaire et mise en page seulement. Je dois cependant pouvoir travailler en mode Feuille de données. Je sais que via la mise en forme conditionnelle, je peux modifier la couleur de fond de certains enregistrements spécifiques en mode Feuille de données, mais puis-je également le faire via VBA? (Pour que je puisse créer le clignotant) – Seb

0

J'ai trouvé un moyen de le faire "clignoter" mais la couleur se met à jour environ. avery 10 secondes et il ralentit évidemment (parfois se bloque) la base de données.

Même si certains pourraient penser que le faire clignoter n'est pas le meilleur moyen, c'est toujours que je veux atteindre, donc si vous avez des idées comment je pourrais le faire fonctionner correctement faites le moi savoir.

C'est ce que je l'ai fait:

  1. J'ai créé un champ supplémentaire aléatoire qui stocke « Oui » soit « Non »
  2. Dans la mise en forme conditionnelle de la forme, je l'ai écrit ce :
  3. en cas minuterie je reliaient le code suivant où la dernière partie ne fonctionne que dans la boucle:

    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