Ich arbeite an einem VBA-Programm, mit dem der Benutzer eine Adresse eingeben und die Position ermitteln kann, indem die Elemente der Adresse mit einer Datenbank abgeglichen werden.
Ich habe leider ein wiederkehrendes Problem mit der Groß-/Kleinschreibung.
Zum Beispiel, wenn ich diesen Code verwende:
For i = 11 To lRowB
Range("B" & i).Activate
myResult = IsNumeric(Application.Match(ActiveCell.Value, manilaListRange, 0))
Es wird den Wert der aktiven Zelle mit einer Liste von Wörtern aus meiner Datenbank vergleichen. Problem ist, wenn in meiner aktiven Zelle das Wort "Miami" oder "MIAMI" ist und nur "Miami" in der Datenbank ist, funktioniert es nicht ...
Anderes Beispiel:
If Range("J6").Value = "tawi" Then
Range("J6").Value = "Tawi-Tawi"
End If
Dasselbe Problem, nur das mit dem gleichen Fall geschriebene Wort wird funktionieren.
Wie kann ich das loswerden? Das ist besonders ärgerlich und ich kann meine Datenbank nicht in jeder möglichen Kombination neu schreiben!
Danke im Voraus !
Es gibt eine Anweisung, die Sie auf Modulebene ausgeben können:
Option Compare Text
Dies macht alle "Textvergleiche" unempfindlich. Das bedeutet, der folgende Code zeigt die Meldung "das ist wahr":
Option Compare Text
Sub testCase()
If "UPPERcase" = "upperCASE" Then
MsgBox "this is true: option Compare Text has been set!"
End If
End Sub
Siehe zum Beispiel http://www.ozgrid.com/VBA/vba-case-sensitive.htm . Ich bin nicht sicher, ob das Problem für alle Instanzen (z. B. die Application.Match
-Funktion) vollständig gelöst wird, es werden jedoch alle if a=b
-Anweisungen berücksichtigt. Wie für Application.Match
- möchten Sie die Argumente mithilfe der LCase
-Funktion in Groß- oder Kleinbuchstaben konvertieren.
Sie können beide Werte in Kleinbuchstaben konvertieren und vergleichen.
Hier ist ein Beispiel:
If LCase(Range("J6").Value) = LCase("Tawi") Then
Range("J6").Value = "Tawi-Tawi"
End If
Wenn die Liste, mit der verglichen werden soll, groß ist (z. B. der manilaListRange-Bereich im obigen Beispiel), ist es ein geschickter Schritt, die Match-Funktion zu verwenden. Es vermeidet die Verwendung einer Schleife, die den Vorgang verlangsamen könnte. Wenn Sie sicherstellen können, dass manilaListRange nur aus Groß- oder Kleinbuchstaben besteht, scheint mir dies die beste Option zu sein. Sie können 'UCase' oder 'LCase' während Ihres Spiels schnell anwenden.
Wenn Sie die ManilaListRange nicht im Griff hatten, müssen Sie möglicherweise auf diesen Bereich zurückgreifen. In diesem Fall gibt es viele Möglichkeiten, "search", "Instr", "replace" usw. zu vergleichen.
Es ist ein bisschen Hack, aber wird die Aufgabe erledigen.
Function equalsIgnoreCase(str1 As String, str2 As String) As Boolean
equalsIgnoreCase = LCase(str1) = LCase(str2)
End Function