VBA: Einsatz und Ersatz für den trinären Operator ?:

Aufgabenstellung

In Hochsprachen wie C#.NET und JAVA hilft der Einsatz vom trinären Operator oftmals, den Code leserlicher zu machen.

Ein Beispiel dafür ist das Zuweisen von Werten für ein Datenbankmodell bei einer Cursor-Iteration.

Wenn eine Materialnummer nicht vorhanden/leer ist, soll als String „not available“ angegeben werden:

Bsp. in C#

...
SqlDataReader reader = comm.ExecuteReader();
...
while (reader.Read())
{
   vo = new WorkflowPositionVO();
   vo.material = (reader.GetValue(0).ToString()=="")?
                       "not available":reader.GetValue(0).ToString();
...

Da der obige Code kompakt auf einer Zeile steht, und die gewünschte Funktionalität nicht durch 6-zeilige if/else-Konstrukte gewährleistet wird, führt dies bei vielen Attributen des Objektes „WorkflowPositionVO“ zu einer erhöhten Lesbarkeit des Codes. Man stelle sich 100 WorkflowPositionVO-Attribute vor, die zugewiesen werden müssen. Die Zahl von 600 (+100 Leerzeilen) würde auf 100 Zeilen reduziert werden, und die Fehleranfälligkeit dramatisch reduziert.

Problem

Der trinäre Operator ?: wird in VBA leider nicht unterstützt.

Ansatz

Die Funktionalität von ?: kann auf einen einfachen IF/ELSE-Zweig abgebildet werden, den man in eine Funktion auslagern könnte. Man könnte sich jetzt eine Funktion selbst implementieren, oder die fertige Funktion IIF benutzen. Hierbei handelt es sich um eine echte VBA-Funktion, die evtl. bereits durch ACCESS-Abfragen in SQL Statements bekannt ist.

Lösung

Bsp. in VBA:

   material = IIf(Tabelle.Cells(i,1)="","not available",Tabelle.Cells(i,1))