|
Visual Basic bietet leider keine Möglichkeit festzustellen, ob ein Array bereits dimensioniert ist oder nicht. Eine indirekte Lösung hat sich Microsoft daher bei der Split-Funktion (ab Visual Basic 6 verfügbar) einfallen lassen, um immer ein irgendwie definiertes Array zurückgeben zu können. Konnte die Split-Funktion den ihr übergebenen String erfolgreich zerlegen, ist es kein Problem, die Elemente des zurückgegebenen Arrays von der Untergrenze bis zur Obergrenze zu durchlaufen:
Dim nElements As Variant
Dim l As Long
nElements = Split("abc/def","/")
For l = LBound(nElements) To UBound(nElements)
... nElements(l) ...
Next 'l
Selbst wenn keine Teilung vorgenommen werden konnte, weil der Trenn-String nicht im übergebenen String enthalten war, wird genau ein Element zurückgegeben, wenn der übergebene String nicht leer war. Das eine und einzige Element enthält diesen komplett - und die Untergrenze als auch die Obergrenze des Array sind gleich, nämlich gleich 0.
Wurde jedoch ein leerer String übergeben, kann somit auch gar kein Element zurückgegeben werden - es tritt das Dilemma auf, dass hier eigentlich ein Array ohne Elemente zurückgegeben werden müsste. Ein Array ohne Elemente wäre aber ein nicht dimensioniertes Array, bei dem jeder Versuch, eine Untergrenze oder eine Obergrenze zu bestimmen, einen Laufzeitfehler auslösen würde.
Hier hat Microsoft nun den Kunstgriff angewandt, die Split-Funktion ein Array liefern zu lassen, dessen Untergrenze nach wie vor 0 ist, dessen Obergrenze jedoch künstlich auf -1 gesetzt wurde. Der obenstehende Schleifendurchlauf bereitet damit keine Probleme, selbst wenn das Array eben kein Element enthält.
Wenn Sie auch Ihre eigenen Funktionen mit einem solchen Kunstgriff zur Lieferung eines in diesem Sinne brauchbaren "leeren" Arrays bringen wollen, nutzen Sie einfach in Ihrer Funktion die Split-Funktion. Lassen Sie diese ihr wohldefiniertes "leeres" Array als Rückgabewert Ihrer Funktion liefern, falls Ihre Funktion ansonsten bisher ein undimensioniertes Array zurückgegeben hätte. Die einzige Voraussetzung hierbei ist, dass das Array von der Funktion als Variant verkleidet zurückgegeben und auf der Aufrufseite ebenso als Variant angenommen wird.
Zum Beispiel könnte das so aussehen:
Public Function GetArray(Parameter...) As Variant
Dim nArray() As Long
' ...
If Irgendwas Then
ReDim nArray(1 To 3)
nArray(1) = 1
nArray(2) = 2
nArray(3) = 3
GetArray = nArray
Else
GetArray = Split("")
End If
End Function
|