Tipp 1.18 - ParamArray verwenden

Wie kann ich eine unbestimmte Anzahl an Argumenten einer Funktion übergeben?

Das letzte Argument einer Argumentenliste in einer Funktion, Prozedur- oder Declare-Anweisung kann mit dem Schlüsselwort ParamArray versehen werden. Ein ParamArray wird verwendet wie die Schlüsselwörter Optional, ByVal oder ByRef. Mit dem Unterschied, dass ParamArray nur alleine und nicht kombiniert verwendet werden darf und immer vom Datentyp Variant ist.

Der Umstand, dass das ParamArray nur dem letzten Argument vorangestellt werden darf, macht schon dessen optionalen Charakter deutlich. Das ParamArray wird zwar ähnlich wie ein Array deklariert, allerdings wird beim Funktionsaufruf kein Array übergeben, sonst könnte man auch genauso gut ein herkömmliches Argument von Typ Variant verwenden. Vielmehr wird die Argumentenliste einfach nach hinten erweitert (durch Kommas getrennt).

Die Anzahl der übergebenen Argumente, also die Dimensionsgrenzen des ParamArray, kann man durch die Funktionen UBound und LBound ermitteln.

Die Beispielfunktion
Public Function AddNumbers(ParamArray paWerte()) _
                           As Double
 
  Dim lLoop As Long
  Dim dblSum As Double
 
  For lLoop = LBound(paWerte) To UBound(paWerte)
    dblSum = dblSum + paWerte(lLoop)
  Next lLoop
 
  AddNumbers = dblSum
 
End Function
Der Aufruf
Public Sub TestAddNumbers()
 
  ' Angabe mit verschiedener Werten
  Debug.Print AddNumbers(10.5, 12.9, 19.2, _
                         20, 31, 10)
  ' Ohne Angabe von Werten
  Debug.Print AddNumbers()
 
End Sub