VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleElement in Array oder Parameter-Liste suchen |
Mit den unten vorgestellten Funktionen ArrayIndex (bzw. ListIndex) kann ein Array (bzw. eine Parameter-Liste) durchsucht werden. Rückgabewert beider Funktionen ist der Treffer-Index. Wird keine Übereinstimmung gefunden, so wird ein Index kleiner als LBound (bzw. -1) zurückgegeben.
Im folgenden Beispiel wird mit einer einzigen Anweisung ein Zahlwort in seinen entsprechenden Zahlenwert umgewandelt:
'Eingabe:
sZahl = InputBox("Zahlwort zwischen Null und Drei?")
sZahl = LCase$(sZahl)
'Suche:
iZahl = ListIndex(sZahl, "null", "eins", "zwei", "drei")
'Ausgabe:
If iZahl < 0 Then
MsgBox "ungültige Zahl"
Else
MsgBox "Zahl = " & iZahl
End If
Bei Eingabe von "eins" wird tatsächlich "Zahl = 1" ausgegeben.
Die ArrayIndex-Funktion vergleicht schrittweise alle Array-Elemente aus Values mit Elem, wobei für Objekte der Is-Operator verwendet werden muss:
Function ArrayIndex( _
ByRef Elem As Variant, _
ByRef Values As Variant _
) As Long
If IsObject(Elem) Then
'Objekte vergleichen:
For ArrayIndex = LBound(Values) To UBound(Values)
If IsObject(Values(ArrayIndex)) _
Then If Elem Is Values(ArrayIndex) _
Then Exit Function
Next ArrayIndex
Else
'"Normale" Werte vergleichen:
For ArrayIndex = LBound(Values) To UBound(Values)
If Not IsObject(Values(ArrayIndex)) _
Then If Elem = Values(ArrayIndex) _
Then Exit Function
Next ArrayIndex
End If
'Kein Treffer:
ArrayIndex = LBound(Values) - 1
End Function
Die ListIndex-Funktion beruht auf ArrayIndex. Werden keine Parameter übergeben, so kann es keinen Treffer geben. Ansonsten wird unterschieden, ob ein komplettes Array oder eine Parameter-Liste übergeben wurde:
Function ListIndex( _
ByRef Elem As Variant, _
ParamArray Values() As Variant _
) As Long
If UBound(Values) < 0 Then
'Keine Liste, also kein Treffer:
ListIndex = -1
Else
If IsArray(Values(0)) Then
'Array durchsuchen:
ListIndex = ArrayIndex(Elem, Values(0))
Else
'Parameter-Liste durchsuchen:
ListIndex = ArrayIndex(Elem, CVar(Values))
End If
End If
End Function
© Jost Schwider, 21.04.2001-21.04.2001 - http://vb-tec.de/arrindex.htm