2017-07-11 17 views
0

Ich möchte, dass einige Datensätze in meinem Access Datenblatt-Formular (abhängig von dem Wert in einem bestimmten Feld) blinken (von einer Farbe zu einer anderen wechseln).Flashing Rows in Access Form Datenblatt

Ich fand eine große Hilfe auf there mit dem On Timer Event des Formulars, aber aus irgendeinem Grund funktioniert es nicht für mich. Ich nehme an, es ist, weil in meinem Fall mein Formular in angezeigt wird Datenblattansicht.

Auch erkannte ich, dass es nur den Wert des aktiven Datensatzes überprüft, aber ich möchte es den Wert aller Datensätze für diesen bestimmten Bereich zu überprüfen (via SQL vielleicht?)

Ist es sogar möglich, Ändern Sie die Hintergrundfarbe eines Datensatzes über VBA in Access oder die einzige Möglichkeit ist über die bedingte Formatierung Werkzeug?

Ich bin ein bisschen verwirrt darüber, wie es weitergehen soll und ob es sogar einen Weg gibt, dies zu tun.

Irgendwelche Ideen, wie man das macht?

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

Bitte beachten Sie, dass es einen Grund gibt, warum Webbrowser (https://developer.mozilla.org/en/docs/Web/HTML/Element/blink) '' nicht mehr unterstützen - es war super nervig. Ich empfehle reguläre bedingte Formatierung mit Farben, die hervorstechen. – Andre

+0

Ja, ich verstehe, aber es ist nicht "blinkend" wie in Ihrem Link gezeigt (das ist ärgerlich, gebe ich zu). Ich möchte jede Sekunde von hell nach dunkelblau wechseln und umgekehrt. Der Grund ist, dass ich bereits 5 Farben auf meinem Formular habe und irgendwann wird es chaotisch, deshalb dachte ich über das blinkende Ding – Seb

Antwort

0

Fügen Sie Folgendes zu Ihrer Form der Code-Datei auf das Boxsteuerelement Text vorausgesetzt, Sie blinken müssen txtReceiver benannt ist:

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 

Die oben wird die Backcolor/ForeColor zu alle Textboxsteuerelemente eingestellt benannte txtReceiver so müssen Sie die bedingte Formatierung einstellen, um dies anzupassen:

Regel :                 Feldwert nicht gleich Martin
Backcolor: Weiß
ForeColor: Schwarz

Alle txtReceiver genannt Textboxsteuerelemente mit einem Wert von "Martin" wird nun blinken.

+0

Danke für Ihren Vorschlag Kostas, es funktioniert gut, aber Form View und Layout-Ansicht nur. Ich brauche es jedoch in der Datenblattansicht zu arbeiten. Ich weiß, dass ich über die bedingte Formatierung die Hintergrundfarbe einiger bestimmter Datensätze in der Datenblattansicht ändern kann, aber kann ich das auch über VBA tun? (Damit ich das Blinken erstellen kann) – Seb

0

Ich fand einen Weg, um es "Flash" zu machen, aber die Farbe aktualisiert ca. avery 10 Sekunden und es verlangsamt offensichtlich (manchmal stürzt) die Datenbank ab.

Obwohl einige denken, es Flash zu machen ist nicht der beste Weg, dies ist immer noch will ich versuchen zu erreichen, also wenn Sie irgendwelche Ideen haben, wie ich es richtig funktionieren lassen könnte, lassen Sie es mich wissen.

Dies ist, was ich getan habe:

  1. ich ein zusätzliches Feld Zufall erstellt habe, die entweder mit „Ja“ entweder „Nein“
  2. In der bedingten Formatierung der Form speichert, ich dies schrieb :
  3. im On Timer-Ereignis ich es dem folgenden Code verknüpft, wo der letzte Teil nur in Schleife läuft:

    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