PDA

Vollständige Version anzeigen : Wenn-Anweisung aus Abfrage in Modul verlagern


mimi999
26.01.2008, 18:55
Hallo zusammen,

in einer Abfrage habe ich ein Tabellenfeld mit Namen "QS". Daneben habe ich eine eigene Spalte mit Namen "Ergebnis" angelegt und darin steht:

Ergebnis: Wenn([qs]>=300;"12";Wenn([qs]>=25;"13";Wenn([qs]>=2;"14";Wenn([qs]>=1;"15";"16"))))

Das funktioniert so wie gewünscht.

Nun würde ich allerdings gern die Wenn-Anweisung auslagern in ein öffentliches Modul, doch weiß ich nicht, wie ich das machen soll.

Ist das im Modul eine Funktion???

Muß ich das hinterher in der Abfrage so schreiben: Ergebnis:test()
(wenn die Funktion "test" heißt)???

Vor allem aber: wie muss dann die Wenn-Anweisung im Modul aussehen???

Oder muss man das ganz anders anfangen?

Vielleicht könnt ihr mir helfen.
Mimi

borisrisker
26.01.2008, 19:08
Hallo,

der Code im Modul:

Function qsErg(qs As Double)

Select Case qs
Case Is >= 300: qsErg = 12
Case Is >= 25: qsErg = 13
Case Is >= 2: qsErg = 14
Case Is >= 1: qsErg = 15
Case Else: qsErg = 16
End Select

End Function


Der Aufruf in der Abfrage:

Ergebniss: qsErg(TABELLENFELD)

mimi999
26.01.2008, 20:10
Hallo Boris,

Suuuper!!!! Funktioniert genau so, wie ich es brauche!
Herzlichen Dank


Noch eine Frage am Rande: bei meinem obgen Beispiel kommt ja insgesamt in der Anweisung (in der abfrage) das Wort "Wenn" mit den entsprechenden Zusatzangaben 4 x vor.

In meiner DB müßte die ganze Anweisung aber 16 oder 17 "Wenn" enthalten, doch das scheint nicht zu gehen, denn dann meldet die Abfrage einen Fehler. Nehme ich zwei oder drei "Wenn" raus, klappt´s. Also vermute ich, dass es eine Grenze von Verschachtelungstiefe gibt, die so bei 14 oder 15 liegt.

Kannst du oder jemand anderes meine Vermutung bestätigen oder hat das andere Gründe?

Mimi

borisrisker
26.01.2008, 20:19
Hallo Mimi,

eigentlich sollte es auch mit 17 Bedingungen funktionieren ... ich habe es gerade mit 25 Case Is Anweisungen gestestet ... kein Problem ...

Josef P.
26.01.2008, 20:28
Wenn die Bedingung in der Abfrage genutzt werden soll, würde ich mir eine Hilfstabelle anlegen und per Join die Werte ermitteln.

ebs17
26.01.2008, 20:34
Eine Wenn-Anweisung und eine Select Case-Anweisung sind nicht das Gleiche.

Bei der Wenn-Anweisung gibt es nur eine bestimmte Verschachtelungstiefe (bei Excel max. 7...8?). Abgesehen davon, dass die Übersicht bei hoher Verschachtelung verloren gehen kann, kann man auch folgende Konstruktion verwenden:

Ergebnis: Wenn([qs]>=300;12;0) + Wenn([qs]>=25;13;0) + Wenn([qs]>=2;14;0) + ...

Josef bietet natürlich die kluge Lösung an. Da sich Kriterien, die Anzahl dieser und die entsprechenden Werte ändern (potenziell) können, ist eine Festcodierung dieser ungünstiger.

mimi999
26.01.2008, 21:17
Vielen Dank für eure Antworten,

mit der Select ... Case Anweisung klappt das auch bei mir mit meinen 16 oder 17 Varianten. Insofern bin ich damit bestens versorgt.

Die Zusatzfrage war nur grundsätzlicher Natur. Und wenn ebs17 sagt, dass offenbar eine Begrenzung für Verschachtelungstiefe existiert, ist damit ja meine Vermutung bestätigt worden. Bezogen auf meine Frage reicht mir diese Antwort.

Aber ist doch interessant, dass so "nebenbei" auch noch zwei tolle weitere Lösungsvorschläge von euch geäußert wurden. Die werde ich - nur so aus Interesse, jetzt auch noch ausprobieren.

Herzlichen Dank euch allen
Mimi

Josef P.
26.01.2008, 21:27
Es gibt auch noch die Funktionen Switch und Choose. Switch kommt select case sehr nahe.

Sobald aber eine dieser Funktionen in einer Abfrage benötigt wird, deutet das meistens auf eine fehlende Tabelle hin. Aus diesem Grund schlug ich in #5 eine Hilfstabelle vor. ;)