PDA

Vollständige Version anzeigen : Listenfelder im Formular ein-oder ausblenden abhängig Inhalt Textfeld


Markus Nbg
28.10.2011, 16:23
Hallo Zusammen

Ich habe ein Endlosformular mit 2 Listenfeldern und ein paar Textfeldern.

In Abhängigkeit des Textfeldes "MatNr" sollen verschiedene Listenfelder angezeigt oder ausgeblendet werden.

Folgendes habe ich probiert:

Private Sub Form_Current()
Select Case Me!MatNr 'Mein Textfeld (setzte ich hier einen Haltepunkt sehe ich die aktuelle MatNr.
Case "R*"
Me!ListeInfos.Visible = True 'Listenfeld Infosatz
Me!ListeBauteil.Visible = False 'Listenfeld Baugruppe
Case "F*"
Me!ListeBauteil.Visible = True 'Listenfeld Baugruppe
Me!ListeInfos.Visible = False 'Listenfeld Infosatz
Case "U*"
Me!ListeBauteil.Visible = True
Me!ListeInfos.Visible = False
Case Else
End Select


sobald ich in dem Feld eine MaterialNummer habe die mit R beginnt soll nur das Listenfeld "ListeInfo" sichtbar sein und "ListeBauteil" nicht

Bei F, U, beginnenden Teilen soll nur die Baugruppe sichtbar sein.

..... was soll ich sagen es funktioniert nicht :( und die SuFu habe ich auch schon durchkämmt :rolleyes: .

Was mache ich falsch??

Danke fürs lesen

Markus

Atrus2711
28.10.2011, 16:42
Hi,

Select Case kennt (leider) keine Platzhalter.

Aber du könntest dir behelfen:
Private Sub Form_Current()
Select Case Me!MatNr 'Mein Textfeld (setzte ich hier einen Haltepunkt sehe ich die aktuelle MatNr.
Case Is >= "U"
Me!ListeBauteil.Visible = True
Me!ListeInfos.Visible = False
Case Is >= "R"
Me!ListeInfos.Visible = True 'Listenfeld Infosatz
Me!ListeBauteil.Visible = False 'Listenfeld Baugruppe
Case Is >= "F"
Me!ListeBauteil.Visible = True 'Listenfeld Baugruppe
Me!ListeInfos.Visible = False 'Listenfeld Infosatz
Case Else
End Select
End Sub


Obacht: die Reihenfolge habe ich umgedreht, denn der erste passende Case zählt! Und mangels Platzhaltern sind die Fälle ja hier überlappend. Daher musste umgedreht werden.

ebs17
28.10.2011, 16:46
Select Case Me!MatNr
Case "R*"
' ...
Hier wird auf Gleichheit geprüft, nicht auf ein Muster. Für gleichen Ablauf sollte etwa das funktionieren:
Select Case Left$(Me!MatNr, 1)
Case "R"

CptChaos
28.10.2011, 16:53
@Martin:
müsste es nicht heißen Select Case Left(Me!MatNr, 1) um auf das erste Zeichen zu prüfen?
Oder überseh ich irgendwas in Deinem Code...

Markus Nbg
28.10.2011, 16:56
Hallo Martin

Danke es funktioniert.

Jetzt aber noch ne Frage zu dem Thema da ja für U und F die selben Bedingungen (Case) gelten, könnte ich das auch in eine Zeile Schreiben.

Die Materialnummern sehen zum Beispiel so aus:

U01000815
F01000815

gibt es da die Möglichkeit z.B.:

Case Is >= "U" oder F oder T

Danke
Markus


Edit: hier wird ja atemberaubend schnell geantwortet :top:

Danke Euch

ebs17
28.10.2011, 16:56
@Benny: Martin vergleicht auf >= und hat die Reihenfolge der Werte vertauscht, damit das aufgeht.

CptChaos
28.10.2011, 16:57
:stupid:
ja... wer lesen kann und so.
Hab heut zuviel Code gesehen... sorry für die Verwirrung

ebs17
28.10.2011, 17:14
Private Sub Form_Current()
If Left$(Me!MatNr, 1) = "U" _
Or Left$(Me!MatNr, 1) = "F" Then
Me!ListeBauteil.Visible = True
Me!ListeInfos.Visible = False
ElseIf Left$(Me!MatNr, 1) = "R" Then
Me!ListeBauteil.Visible = False
Me!ListeInfos.Visible = True
Else
' Ausweg
End If
End Sub
Das sollte dann auch erweiterbar sein.

Als Kurzform:
Private Sub Form_Current()
Me!ListeBauteil.Visible = Not Left$(Me!MatNr, 1) = "R"
Me!ListeInfos.Visible = Left$(Me!MatNr, 1) = "R"
End Sub

Nachtrag: Wenn dieser Präfix so inhaltsschwer ist, könnte man ja darüber nachdenken, einen weiteren Normalisierungsschritt zu gehen.

Markus Nbg
28.10.2011, 21:06
Danke für Dein Posting werde ich später noch testen.

Was heisst ?


Nachtrag: Wenn dieser Präfix so inhaltsschwer ist, könnte man ja darüber nachdenken, einen weiteren Normalisierungsschritt zu gehen.


Markus :)


EDIT: DANKE funktioniert :top:

ebs17
28.10.2011, 21:19
Die Materialnummern sehen zum Beispiel so aus:
U01000815
F01000815
Entsprechend 1. Normalform speichert man atomare Informationen in getrennten Tabellenfeldern ab. Damit sind solche Informationen auch einfach und unter Nutzung von Indizes filter-, gruppier-, sortierbar, und Indexnutzung bedeutet Performance - in Datenbanken sicher nicht uninteressant.

Zusammensetzen (z.B. in einer Abfrage) ist einfacher und schneller als Trennen. Der hier vorliegende Fall (1 Buchstabe am Beginn) ist ja noch sehr simpel, wenn es statt "F" wahlweise auch mal "F2" oder "F20" heißen kann, wird es beim Trennen schon mal etwas aufwändiger.

Markus Nbg
28.10.2011, 21:37
.... Danke für die Info

es wäre mir auch lieber gewesen die MatNr wäre wirklich eine Nr sprich Zahl.

Die Daten kommen aus SAP.
Eine F Nr. kann es mit den selben Zahlen als U,T oder xy-Nr geben. Die Buchstaben stehen für
Baugruppenebenen in den Stücklisten.

Markus :)