it-swarm.com.de

In VBA die Groß- und Kleinschreibung beim Vergleich von Wörtern beseitigen?

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 !

27
Phalanx

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.

50
Floris

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
17
Vasanth

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. 

3
dra_red

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
0
MeLine