none
Formularfelder mit Tabelle vergleichen und bei Übereinstimmung Hintergrundfarbe ändern?

    Frage

  • Hallo ihr Spezialisten.

    Da bin ich mal wieder und komme mit meiner Idee nicht weiter.

    Ich vergebe an Fahrzeugen Plomben. Dazu habe ich ein Formular, wo ich die Plombennummer eintrage und auf den Dokumenten ausdrucke. Um es mit zu erleichtern, ist in dem Formular ein Unterformular mit 30 ungebundenen Feldern, weil ein Satz Plomben 30 Stück stark ist. 

    In dem ersten Feld trage ich die Anfangsnummer ein und in den 29 anderen Feldern wird der Wert jeweils um eines erhöht.

    Nun hätte ich gerne, dass die vergebenen Nummern kenntlich gemacht werden, damit man schnell die nächste freie Nummer finden kann.

    Habe es mit folgendem Code versucht, der auch funktioniert, doch bei 30 Feldern Access doch sehr zum arbeiten bringt:

    If DCount("*", "[abf_Plombennummern]", "[Plombennummer] = " & Me![Startplombe]) > 0 Then
    Me![Startplombe].BackColor = vbRed
    Else: Me![Startplombe].BackColor = vbYellow
    End If

    If DCount("*", "[abf_Plombennummern]", "[Plombennummer] = " & Me![1]) > 0 Then
    Me![1].BackColor = vbRed
    Else: Me![1].BackColor = vbWhite
    End If

    und das noch 28 Mal.

    Dann dachte ich mir, ich mach ein Array und zieh mir da die 30 Plomben rein und vergleiche das Array nach doppelten Werten in der Tabelle der vergebenen Plombennummern. Geht superschnell....doch nun habe ich Probleme, das entsprechende Feld zu bestimmen und zu färben.

    Dim arr_Plombe(30) As Variant, mArr As Variant, Found As Boolean, fld As Field

    arr_Plombe(0) = Me![Startplombe]
    arr_Plombe(1) = Me![1]
    arr_Plombe(2) = Me![2]
    arr_Plombe(3) = Me![3] usw.

             

     For Each mArr In arr_Plombe

             If DCount("[Plombennummer]", "[abf_Plombennummern]", "Left([Plombennummer], 7) = '" & mArr & "'") > 0 Then
                Found = True: Exit For
            End If
        Next mArr
        If Found Then

    msgBox "Doppelten Wert gefunden"

            End If

    An welcher Schraube muss ich drehen, dass das richtige Feld ermittelt und eingefärbt wird?

    Oder bin ich auf dem falschen Weg und es gibt eine elegantere Lösung?

    Bitte euch höflichst um einen kleinen Schubs in die richtige Richtung.

    Gruß, Klaus.

    Freitag, 20. März 2015 04:36

Antworten

  • Hi Klaus,
    warum nutzt Du eine foreach-Schleife? Wenn du mit einer for-Schleife arbeitest hast Du einen Index, mit dem Du einfach eines der 30 Felder ansprechen kannst. In der If-Anweisung baust Du kein Exit For ein, sondern merkst Dir nur das doppelte Auftreten.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Freitag, 20. März 2015 06:34

Alle Antworten

  • Hi Klaus,
    warum nutzt Du eine foreach-Schleife? Wenn du mit einer for-Schleife arbeitest hast Du einen Index, mit dem Du einfach eines der 30 Felder ansprechen kannst. In der If-Anweisung baust Du kein Exit For ein, sondern merkst Dir nur das doppelte Auftreten.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Freitag, 20. März 2015 06:34
  • Hallo Peter.

    Danke für deine schnelle Antwort.

    Manchmal....Baum....Bäume und so :-)

    Ich habe das alles auch nicht richtig gelernt. Google und viel lesen hilft meistens schon sehr.

    Doch diesmal kam ich nicht weiter. Voll in die falsche Richtung gedacht und gesucht.

    Ich fummel mich da jetzt mal durch und wenn ich es geschafft habe, poste ich hier die Lösung, falls jemand mal ein ähnliches Problem hat.


    Dankender Gruß, Klaus.

    Freitag, 20. März 2015 06:55
  • Hallo.

    Ich hab es dank Peter hin bekommen.

    Auf folgende Weise konnte ich meinen Wunsch umsetzen:

                             

    Dim arr_Plombe(10) As Variant, mArr As Variant, ctl As Control

    arr_Plombe(0) = Me![Startplombe]
    arr_Plombe(1) = Me![1]
    arr_Plombe(2) = Me![2]
    arr_Plombe(3) = Me![3]
    arr_Plombe(4) = Me![4]
    arr_Plombe(5) = Me![5]
    arr_Plombe(6) = Me![6]
    arr_Plombe(7) = Me![7]
    arr_Plombe(8) = Me![8]
    arr_Plombe(9) = Me![9]

    For Each ctl In Me.Controls
    Select Case ctl.ControlType
    Case acTextBox'
    If DCount("[Plombennummer]", "[abf_Plombennummern]", "Left([Plombennummer], 7) = '" & ctl & "'") > 0 Then
    ctl.BackColor = vbRed
    Else: ctl.BackColor = vbWhite
    End If
    End Select
    Next ctl
    End Sub

    Hoffe, es kann auch anderen dienlich sein.

    Dankender Gruß, Klaus.

    Freitag, 20. März 2015 12:09