Hallo,
in einem Formular soll bei Klicken in das Artikelfeld, der Schrank, in dme sich der Artikel befindet in ort angezeigt werden. Habe dazu folgenden Code (da ich aber 15 Schränke habe - die Feldnamen sind jeweils txt_schrank1 bis txt_schrank15) frage ich mich, ob ich das nicht mit einer Variable lösen könnte, statt mit 15 Case Zeilen.
Private Sub txt_Bezeichnung_Click()
'Schrank in rot anzeigen
Select Case txt_Schrank
Case "Schrank1"
Me.txtSchrank1.BackColor = 255
Case "Schrank2"
Me.txtSchrank2.BackColor = 255
End Select
End Sub
N'abend
ist die Nomenklatur immer "txt_Schrankxx" {xx: einstellige bis zweistellige Zahl}?
Dann ist folgendes denkbar:
Beim Feld "Artikelfeld" das Ereignis "Nach Aktualisierung" ergänzen um:
Me("txt_" & Me!Artikelfeld).backcolor=255
Ist ungetestet. Fehlt auch noch eine Fehlerbehandlung (z.B. im Kombifeld wird ein Inhalt eingetragen, den es nicht als Feld gibt. Oder wird das via Auswahlliste abgefangen?)
Mir ist allerdings nicht klar, ob Du nun einen Unterstrich verwendest (siehe Prosatext) oder nicht (siehe case-Anweisung).
Harald
Vielen Dank, funktioniert zwar wunderbar, nur bleiben diejenigen rot , die man vorher gesucht hat(wenn man weiter sucht)
Ja, sorry, ich hatte keine Unterstriche.
Ja, das Ganze geht über ein Kombifeld
Hallo,
es müssen halt vorher alle Textfelder wieder auf die Ursprungs-Hintergrundfarbe zurückgesetzt werden:
Dim i as Long
For i= 1 to 15
Me("txtSchrank" & i).Backcolor =vbWhite
Next
Die Lösung von Franz funktioniert besser nach meinen Tests. Habe deshalb den bislang hier stehenden Vorschlag gelöscht.
Harald
Hallo,
...und das Codefragment von DF6GL baust du hier ein:
Private Sub txt_Bezeichnung_Click()
'Felder entfärben
Dim i as Long
For i= 1 to 15
Me("txtSchrank" & i).Backcolor =vbWhite
Next
'Schrank in rot anzeigen
Select Case txt_Schrank
Case "Schrank1"
Me.txtSchrank1.BackColor = 255
Case "Schrank2"
Me.txtSchrank2.BackColor = 255
End Select
End Sub
Solte laufen
Grüße
Peter
Hallo Peter,
ist Dein Case-Code nicht ein Rückschritt gegenüber der Lösung von bahasu?
Me("txt_" & Me!Artikelfeld).backcolor=255
@Maxel
Nein... ;)
wobei das nicht 'mein' Case-Code ist ... 8)
ob's nun mit bahasu's oder seiner eigenen Methode realisiert wird ändert nichts an der Stelle, an der die Felder zu entfärben sind.
OK,
ich hatte den Threadstarter so verstanden, dass er das Case-Konstrukt elegant ersetzen möchte und Franz' Beitrag nur eine Ergänzung zur Entfärbung war.
Hallo,
lol, so ein pile-up hier (würde ich als OM sagen) ... ;D :D
als Komplettlösung (ohne Errorhandler, der nötig ist, wenn es da evtl. falsche/fehlende Schranknamen geben sollte):
Private Sub txt_Bezeichnung_Click()
Dim i as Long
'Felder entfärben
For i= 1 to 15
Me("txtSchrank" & i).Backcolor =vbWhite
Next
' akt. Schrank in rot anzeigen
Me("txt" & Me!txtSchrank).Backcolor=255
End Sub
Möglich/besser wäre auch das Form_Current-Ereignis, dann spart man sich die Klickerei..
Wenn im gebundenen Textfeld "txtSchrank" der Name des Schrankes, in dem sich der akt. angezeigte Artikel befindet, steht ("Schrank1", "Schrank2",etc) und die ungebundenen Textfelder "txtSchrank1", "txtSchrank2" , etc. heißen..
Hallo,
ist vielleicht auch besser, generell den Tip-Vorschlagenden die Sache erklären/verbessern/ändern zu lassen, als das von anderen zusätzliche oder lediglich erläuternde Beiträge erstellt werden.
Gruß Oma
N'abend
Nachdem mein Lieblings Krimi im Fernsehen beendet ist, noch eine Variante als Zweizeiler (allerdings auf zwei Ereignisse aufgeteilt).
Das folgende gilt für die Ereignisse des Kombifeldes:
1. Beim Ereignis "Bei Änderung" eintragen {dient zum Löschen einer roten Farbe}:
If Nz(Me!DeinKombifeld) > "" Then Me("txt" & Me!DeinKombifeld).BackColor = vbWhite ' oder Deine gewünschte Farbe
2. Beim Ereignis "Nach Aktualisierung" eintragen {dient zum Rotfärben}:
If Nz(Me!DeinKombifeld) > "" Then Me("txt" & Me!DeinKombifeld).BackColor = 255
Es führen viele Wege nach Rom.
Harald