2016-07-18 23 views
1

Problem:MS Access 2010 - Split Form flackernden [Bedingte Formatierung]

Alles war ziemlich gut funktioniert, und dann habe ich zwei Felder in die Formkörper (und das Datenblatt): "Impact" und „Zins ". Ich setze diese auf bedingte Formatierung, so dass, wenn sie den Text "rot" enthalten, sie eine rote Füllung haben.

Wenn das Formular geladen wird, wird die bedingte Formatierung sofort auf den ersten Eintrag in der Datenblattansicht angewendet, und es dauert eine Sekunde, um die anderen beiden Einträge anzuwenden Ich lege "gelb" und "grün" in (die sind konditioniert, um jeweils eine gelbe und grüne Füllung aufzuweisen). Wenn ich den dritten Eintrag wähle, der beim Laden des Formulars ausgewählt wird, wird die Formatierung sofort auf die Datenblattansicht angewendet. MS Access sagt, dass es "Calculating" ist, und wenn dies abgeschlossen ist, wird die bedingte Formatierung angewendet.

ferner dazu , wenn der erste Textfilter wird die Formkörper Textfelder „impact“ und „interest“ flicker sowie der zweiten Textfilter in dem Header und die „forename“ des ausgewählten Eintrags angewandt in der Datenblattansicht (mein VBA-Code wählt den Vornamen, nachdem der Filter angewendet wurde). Wenn ich die Maus bewege, hört das Flackern auf und der Filter wird angewendet. Manchmal passiert das Flackern jedoch nicht. Dies ist nur passiert, seit ich die Felder "Auswirkung" und "Interesse" mit bedingter Formatierung hinzugefügt habe.

Dies ist die grundlegende Struktur meiner Form:

Formularkopf: Einige Tasten und zwei Textfelder. Der Benutzer gibt seine Suchbegriffe ein und drückt die "Apply Filter" -Schaltflächen, um die in der Datenblattansicht angezeigten Daten einzugrenzen.

Datenblatt anzeigen: Die Schlüsselspalten sind sichtbar, und wenn der Benutzer auf einen klickt, wird das Profil im Formular angezeigt.

Formkörper: Enthält die Daten aus dem Datenblatt, entsprechend der Kategorie.

Hier ist der Code für die, wenn meine Form Lasten - es lädt alle relevanten Daten, setzt ein Kontrollkästchen, und setzt den Fokus auf das erste Textfilter:

Private Sub Form_Load() 

Me.RecordSource = "SELECT * FROM Staff " 
CheckImpInt.Enabled = True 
CheckImpInt = False 
StaffTotalSearchText1.SetFocus 

End Sub 

Und hier ist der Code für das erste Filter-Taste:

Private Sub Filter1Button_Click() 

If CheckImpInt = True Then 

Me.RecordSource = "SELECT * FROM Staff " & _ 
"WHERE [Interest] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Impact potential] Like '*" & Me![StaffTotalSearchText1] & "*'" 

Else 

Me.RecordSource = "SELECT * FROM Staff " & _ 
"WHERE [Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Position] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Group] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Division] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [All groups] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Expertise] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Institutes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Roles] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [skills - analysis] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [skills - compute] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Notes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Paired IC] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
    "Or [Paired Company?] Like '*" & Me![StaffTotalSearchText1] & "*' " 

End If 

End Sub 
+0

Ich bin verwirrt. Wann flimmert es - Sie sagen "wenn das Formular geladen wird" - wann passiert das? Ist es, wenn Sie auf den Datenblatteintrag klicken? Oder flackert es, wenn Sie auf die Schaltfläche Filter anwenden klicken. Was ist Code im Form_Load-Ereignis - und in der Befehlsschaltfläche click-Ereignis für Apply-Filter – dbmitch

+0

Wenn das Formular geladen wird, haben alle Farben in der Datenblattansicht neben denen im ausgewählten Eintrag nur eine bedingte Formatierung, nachdem MS Access die Berechnung beendet hat ". Dieses "Berechnen" findet statt, unabhängig davon, ob eine bedingte Formatierung vorliegt oder nicht. – Idios

Antwort

0

ich bin mir nicht sicher, warum recordsiurce in Ihrem Formload Ereignis gesetzt wird - es sieht aus wie es gleich bleibt - abgesehen von Filtern.

würde ich empfehlen,

  • Ihre Form des Set Datenherkunft zu [Staff] und entfernen Me.RecordSource = "SELECT * FROM Staff" vom Ereignis
  • Ihre filter_button Ereignis ändern Filter von Datenherkunft verwendet stattdessen verwenden

aktualisieren FilterButton_Click Unter

Private Sub Filter1Button_Click() 
    If CheckImpInt = True Then 

     Docmd.ApplyFilter , "[Interest] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Impact potential] Like '*" & Me![StaffTotalSearchText1] & "*'" 

    Else 

     Docmd.ApplyFilter , "[Forename] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Surname] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Position] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Group] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Division] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [All groups] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Expertise] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Institutes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Roles] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [skills - analysis] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [skills - compute] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Notes] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Paired IC] Like '*" & Me![StaffTotalSearchText1] & "*'" & _ 
      "Or [Paired Company?] Like '*" & Me![StaffTotalSearchText1] & "*' " 

    End If 

End Sub 

Sie würden auch bessere Leistung erzielen, wenn Sie diese beiden Filter in tatsächliche Abfragen verschoben haben - dann ändern Sie den ApplyFilter, um den Where-Parameter anstelle von Filter zu verwenden, aber das ist ein ganz anderer Takt.

Schließlich, wenn Sie das Flimmern vollständig entfernen möchten, können Sie Zeilen hinzufügen, um die Bildschirmaktualisierungen zu stoppen, bevor Sie den Filter anwenden - und dann am Ende des Unters einschalten.

Toggle Screen aktualisiert

Application.Echo False hinzufügen vor dem if-Block
hinzufügen Application.Echo True nach dem if-Block

+0

Der Grund, warum ich den Rekordquellen-Hack benutze, ist, dass ich eigentlich zwei Textfilter habe - und nur auf Docmd.ApplyFilter gleichzeitig funktioniert. Ich ging mit der Antwort von Johnny Bones in diesem Thread http://stackoverflow.com/questions/37994601/multiple-text-filters-in-microsoft-access-2010 – Idios

+0

Ich denke, dass ich RecordSource in Form.OnLoad setze, weil ich den Datensatz ändere Quelle, Schließen des Formulars, dann erneutes Öffnen des Formulars, verursachte das Laden des geänderten (nicht vollständigen) Datensatzes – Idios

+0

Ich werde den Bildschirm Flicker-Code später testen. Wie viel effizienter wäre die Datenbank, wenn ich Abfragen verwende? Ich kann sehen, wie man die Änderungen macht, ich glaube (wo Formname! [Textfilter1] .....) – Idios