Wenn man an LIKE denkt, fällt einem sicherlich (als erstes) der Operator in Abfragen ein. Dieser Operator ermöglicht einfache Suchabfragen unter Verwendung von Wildcards. So steht das Zeichen "*" für ein oder mehrere beliebige Zeichen.
Was in SQL-Abfragen geht, ist aber auch direkt in VBA möglich. Eine Dokumentation findet man in der Online-Hilfe oder in der MSDN.
Jetzt stellt sich natürlich die Frage, was man mit diesem Befehl anstellen kann, was nicht mit anderen Befehlen auch gelöst werden kann.
Wenn man z.B. wissen möchte, ob ein Text in einem anderen Text enthalten ist, kann man das mit Like lösen:
1: str = "Brave new world"
2: If (str Like "*new*") Then
Man kann für diese Aufgabe alternativ den Befehl InStr verwenden:1: str = "Brave new world"
2: If (InStr(str, "new") > 0) Then
Ähnlich verhält es sich, wenn man prüfen möchte, ob ein Text mit einer Zeichenfolge beginnt oder endet. Mit dem Befehl Like sieht der Code wie folgt aus:
1: str = "Hello world"
2: If (str Like "Hello*") Then
3: ...
4: If (str Like "*World") Then
Die meisten Programmierer werden diese Aufgabe wahrscheinlich mit Hilfe der Befehle Left$ und Right$ lösen:1: str = "Hello world"
2: If (Left$(str, 5) = "Hello") Then
3: ...
4: If (Right$(str, 5) = "World") Then
Ich habe die konkrete Aufgabe, eine eingegebene Kunden-Nr. auf Gültigkeit hin zu überprüfen. Ein Kriterium ist, dass die Kunden-Nr. nur aus Ziffern besteht. Die Kunden-Nr. kann dabei beliebig viele Stellen haben. Eine Prüfung mit einer Schleife, Zeichen für Zeichen, wollte ich ausschließen, da die Funktion später auch in Abfragen zur Prüfung des kompletten Datenbestands eingesetzt werden soll.
Schnell kam ich auf die Idee, die Eingabe mit der Funktion IsNumeric zu prüfen:
1: strInput = "1234"
2: If (IsNumeric(strInput) = False) Then
Auf den ersten Blick sieht diese Lösung gut aus. Die Nachteile offenbaren sich erst später. So akzeptiert die Funktion nicht nur Ziffern für die Eingabe. Es werden auch der Punkt und das Komma als Tausender- bzw. als Dezimaltrennzeichen akzeptiert: ? IsNumeric("-1.234,2")
Wahr
Hier schlägt jetzt die Stunde des Like-Befehls. Sicher könnte man die von der Funktion IsNumeric akzeptierten Zeichen, die keine Ziffer sind, mit Hilfe des InStr-Befehls herausfinden. Der Code wird dann aber schnell lang und unübersichtlich. Einfacher geht es mit dem richtige Suchmuster beim Like-Befehl.
Mit dem Like-Befehl kann man prüfen, ob ein Zeichen in einer Werteliste vorkommt. Für Ziffern ist die Werteliste 0 bis 9:
? "1" Like "[0-9]"
Wahr
Man kann die Prüfung auch umkehren und prüfen, ob ein Zeichen gefunden wird, dass nicht in der Werteliste vorkommt: ? "1" Like "[!0-9]"
Falsch
Wenn man diese Prüfung jetzt noch auf jedes Zeichen der Eingabe anwendet, ist das Ziel erreicht:1: Dim strInput As String
2: strInput = "-1.234,5"
3: If strInput Like "*[!0-9]*" Then
4: MsgBox "Unzulässiges Zeichen!"
5: End If
Mit dem Like-Befehl wird jetzt geprüft, ob es irgendwo in der Eingabe ein Zeichen gibt, das nicht in der Werteliste [0-9] enthalten ist. Mit diesem einfachen Befehl habe ich mein Ziel erreicht.Es scheint, als ob der Befehl Like unter VBA nicht die notwendige Aufmerksamkeit erhält, die er verdient. Mit diesem Befehl kann man Prüfungen, die man sonst mit Left$, Right$ und InStr vornimmt, auf einfache Art durchführen. Außerdem sind Vergleiche mit komplexeren Suchmustern möglich. Ein Beispiel habe ich in diesem Beitrag aufgezeigt.
Der Befehl Like kann mehr, als man im ersten Moment denkt. Es lohnt sich auf jeden Fall, sich mit den Möglichkeiten zu beschäftigen.
Keine Kommentare:
Kommentar veröffentlichen