Arrays als Funktionsergebnis

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Eine Sub-Prozedur führt unter VBA eine Aktion durch, eine Funktion möglicherweise auch, doch wichtiger ist in der Regel das berechnete Ergebnis, welches sie dem Aufruf zurückgibt. Fast immer handelt es sich dabei um einen bestimmten gesuchten Wert. Gelegentlich erwartet die aufrufende Prozedur aber auch eine Menge von Rückgabedaten. Hier kommen Arrays ins Spiel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1508_Array.accdb.

Multiple Ergebnisse

Gerade in der Datenbankprogrammierung ist die Rückgabe von Ergebnissen, die mehr, als einen Wert enthalten, trivial. Nur kommen hier zur Auswertung gewöhnlich Datenbankobjekte zum Einsatz, deren Hauptprotagonist das Recordset ist.

So gibt die Methode OpenRecordset von DAO nicht nur eine Serie von Daten zurück, sondern sogar eine zweidimensionale: in der einen Dimension die Spalten, also Felder, eines Datensatzes, in der anderen die Datensätze selbst.

An die Zellen dieser zweidimensionalen Wertemenge gelangt man dann über spezielle Methoden des Objekts, statt über Indizes, wie das bei Arrays der Fall ist. Auf der einen Seite ist dies praktisch, auf der anderen Seite verlangt es mehr Programmierung.

Hierzu ein Beispiel. Sie möchten den Wert der Zelle einer Adressentabelle ermitteln, sei es etwa die dritte Spalte des vierzehnten Datensatzes. Unter Excel könnte das Arbeitsblatt nun tatsächlich über Koordinaten abgefragt werden:

Debug.Print WorkSheet.Cells(13,2)

Bei einem Recordset ist das nicht direkt möglich. Hier sähe die Routine so aus:

Set rs = CurrentDb. _
     OpenRecordset("tblAdressen")
rs.Move 13
Debug.Print rs(2).Value

Hier haben wir eine Zeile mehr Code und die übersicht ist geringer, weil die Koordinaten auf unterschiedliche Zeilen aufgeteilt sind.

Befänden sich alle Adressdaten in einem Array, so könnte über zwei Indizes auf die Zelle zugegriffen werden. Immerhin hält DAO dafür eine eigene Methode bereit:

Set rs = CurrentDb. _
     OpenRecordset("tblAdressen")
V = rs.GetRows
Debug.Print V(2,13)

GetRows verwandelt nämlich die Datensätze eines Recordsets in ein zweidimensionales Array, wobei dieses als Variant deklariert sein muss und die einzelnen Elemente darin ebenfalls diesen Datentyp aufweisen.

Wollten Sie dieses Array als Ergebnis einer Funktion zurückgeben, dann käme diese Routine infrage:

Function TabellenArray() As Variant
     Dim rs As DAO.Recordset
     Set rs = CurrentDb. _
         OpenRecordset("tblAdressen")
     TabellenArray = rs.GetRows
End Function

Aber schauen wir uns den Umgang mit Arrays in Funktionen einmal etwas genereller an.

Array mit Elementen füllen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar