Leere Vergleichskriterien in IF Code überspringen?
02.04.2008 11:30:00
Andreas
je mehr ich mich in VBA einarbeite, desto mehr Spaß macht es und immer wieder sehe ich dadurch neue großartige Möglichkeiten, die ihrerseits wieder Fragen induzieren. Das ist interessant, bringt mich zuweilen aber auch wieder schnell an meine Grenzen der VBA Erfahrung. So auch heute Morgen. Mit Hilfe des Forums habe ich ein Makro erstellen können, welches Listen in Abhängigkeiten generiert. Beispielsweise nur alle Datensätze mit dem Attribut aktiv auflisten. Oder noch weiter auf aktiv (Status) + Europa (Region) eingrenzen. Das Funktioniert sehr gut. Nun habe ich mich jedoch gefragt, was passiert, wenn ich eine Codezeile so aufgebaut habe, daß sie zwei Kriterien prüft und dann jedoch ein Kriterium davon Leer () ist. Ich könnte vorher eine weitere If Prüfung einsetzen.
1. Lösungsidee:
Wenn Vergleichskriterium (Region) = , dann
vergleiche nur den Status
sonst
vergleiche Staus und Region.
Das ist OK. Aber bei mehreren Vergleichskriterien ist es unübersichtlich immer solch umfangreiche IF Abfragen zu konstruieren.
2. Lösungsidee:
Wenn Vergleichskriterium (Region) = , dann setze Region als Jokerzeichen * (PS: Was ist das korrekte Jokerzeichen in VBA. Mit * hat es bei mir nicht funktioniert?!
Das Problem ist dabei, daß das Makro dann immer alle Kriterien durchläuft, auch wenn diese Leer, bzw. als Joker gesetzt sind. Das frisst Rechenleistung an einer Stelle, wo es nicht sein muß. Die Makros laufen auf über 5.000 Zeilen, in denen verglichen wird. Bei der IF Prüfung wird immer der optimale Code ins Rennen geschickt, aber bei einer großen Anzahl von Prüfungen, habe ich dann eine arg komplexe IF Verschachtelung.
3. Lösungsidee:
Ich setze vor jeder Prüfung per se die Frage, ob das Referenzkriterium, gegen das die Prüfung erfolgen soll, überhaupt vorhanden ( ) ist. Wenn es leer ist, soll es in der CodeZeile übersprungen werden.
Wenn Region = , dann überspring diese Prüfung und gehe gleich zur nächsten mit AND folgenden Prüfung. Vermutlich muß man in der Zeile einbauen. IF Region = , then set Prüfungsergebnis ungesehen auf TRUE.
Aber daran verbeiße ich mich nun schon seit fast zwei Stunden und sehe in meiner Datei vor lauter Zeilen und Ansätzen nicht mehr durch.
Anbei habe ich eine Beispieldatei kreiert, die den IF Weg aufzeigt und ein Kommentar am Code, der die 3. Lösungsidee noch einmal illustriert.
https://www.herber.de/bbs/user/51204.xls
Ich würde mich sehr freuen, wenn der ein oder andere von Euch mich auf die richtige Fährte setzen kann.
Vielen Dank und Grüße, Andreas Hanisch