Die Verwendung von Safe-Arrays

Will man einen ganzen Satz von Werten abfragen, ist die Übergabe in einem einzigen Aufruf effizienter als eine Reihe von Abfragen einzelner Werte. Deshalb haben wir Funktionen mit Array-Rückgabewerten eingeführt, womit ganze Vektoren (z.B. von Kommutationszahlen) zurückgegeben werden.

In Visual Basic und in OLE gibt es für die Speicherung von Vektoren die 'SafeArrays', welche neben den Werten auch die Grösse des Vektors und den Startindex beinhalten. Damit kann sichergestellt werden, dass keine Zugriffe über die Vektorgrenzen hinaus erfolgen, d.h. die Arrays sind 'safe'.

Obwohl Visual Basic und OLE die gleichen Elemente verwenden, ist die direkte Übergabe solcher Elemente an Visual Basic nicht möglich (Microsoft System-Journal Sept./Okt. 96; S.150). Man muss vielmehr die Safe-Arrays innerhalb einem Variant-Element definieren. Dann können sie auch übergeben werden.

Wir haben die Datenelemente innerhalb des Arrays selbst wieder als Variants angelegt. Das ist etwas aufwendiger, ist aber für den Aufrufer einfach zu handhaben. Z.B. kann in Excel ein Range-Objekt durch eine einfache Zuweisung in einem Array gefüllt werden (Kofler, Seite 242). Allerdings stehen für eindimensionale Arrays, welche wir z.B. im Unterobjekt 'Kommutat' durch die Funktion 'Array' aufrufen, nur horizontale Bereiche zur Verfügung. In den Tarifbüchern braucht man sie in der Regel vertikal. Hierzu benötigt man 2-dimensionale Arrays mit einer trivialen ersten Dimension; hierzu wurde die Funktion 'Array2' definiert. Für das Auffüllen der Spalte A mit den Werten vn benötigt man dann nur den Aufruf:

Sheets!Tabelle1.[a1:a120] = act.Array(Kom_vn, True)