Schatz. Guck mal! Kann ich den Bikini noch tragen? – Tragen schon, aber nicht mehr anziehen!

Wenn man mit VBA programmiert und wissen möchte, ob in einem Text ein anderer vorhanden ist, kann man mit den Funktionen Left, Right, Mid oder Instr arbeiten. Oder den Vergleichsoperator Like verwenden. Also beispielsweise

If txtIBAN.Value Like „DE*“ Then …

Die Aufgabe: ich will Namen in Excel prüfen. Ich möchte wissen, ob sie auf intelligente Tabellen verweisen, also einen Aufbau haben, wie beispielsweise:

=tbl_Feiertage![#Alle]

oder:

=tbl_Feiertage[2021]

Also prüfe ich:

    For i = 1 To ThisWorkbook.Names.Count
        If ThisWorkbook.Names(i).RefersToLocal Like "=*[*]" Then
            MsgBox ThisWorkbook.Names(i).Name & " bezieht sich auf: " & ThisWorkbook.Names(i).RefersToLocal
        End If
    Next

Und wundere mich, warum die If-Verzweigung nichts findet.

Okay – noch ein Versuch – ich lasse die letzte eckige Klammer weg und prüfe erneut:

For i = 1 To ThisWorkbook.Names.Count
    If ThisWorkbook.Names(i).RefersToLocal Like "=*[*" Then
        MsgBox ThisWorkbook.Names(i).Name & " bezieht sich auf: " & ThisWorkbook.Names(i).RefersToLocal
    End If
Next

Verwundert reibe ich mir die Augen. Was klappt nicht? Die Prüfung

If ThisWorkbook.Names(i).RefersToLocal Like "=*" Then

funktioniert …

Ein Blick in die Hilfe beantwortet meine Frage:

https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/like-operator?f1url=%3FappId%3DDev11IDEF1%26l%3Dde-DE%26k%3Dk(vblr6.chm1008961);k(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue

Die eckige Klammer ist als Zeichen reserviert. Man muss sie entwerten. Weiter unten lese ich:

Ah – so funktioniert es:

If ThisWorkbook.Names(i).RefersToLocal Like "=*[[]*" Then

Oder auch so:

If ThisWorkbook.Names(i).RefersToLocal Like "=*[[]*[]]" Then

Warum nicht gleich?!?

One comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.