2013-06-11 7 views
18

Ich arbeite an einem VBA-Programm, mit dem der Benutzer eine Adresse eingeben und den Standort finden kann, indem er Elemente der Adresse mit einer Datenbank abgleicht.In VBA loswerden der Groß-/Kleinschreibung beim Vergleichen von Wörtern?

Leider habe ich 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 ist gonna den Wert der aktiven Zelle aus meiner Datenbank zu einer Liste von Worten zu vergleichen. Das Problem ist, wenn in meiner aktiven Zelle das Wort "Miami" oder "Miami" ist und nur "Miami" in der Datenbank, wird es nicht funktionieren ...

Ein anderes Beispiel:

If Range("J6").Value = "tawi" Then 
Range("J6").Value = "Tawi-Tawi" 
End If 

Dasselbe Problem, nur das mit demselben Fall geschriebene Wort wird funktionieren.

Wie kann ich das loswerden? Es nervt besonders und ich kann meine Datenbank nicht in jedem Fall neu kombinieren!

Vielen Dank im Voraus!

+1

Anwendung zurückgreifen müssen, um durch diesen Bereich zu looping .match ist _nicht_ Groß-und Kleinschreibung, so denke ich, dass Sie ein anderes Problem haben – JosieP

Antwort

38

Es ist eine Aussage, die Sie auf der Modulebene ausgeben kann:

Option Compare Text 

Dies macht alle "text-Vergleiche" Groß- und Kleinschreibung. Dies bedeutet, dass der folgende Code die Meldung wird: „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 

für Siehe Beispiel http://www.ozgrid.com/VBA/vba-case-sensitive.htm. Ich bin nicht sicher, dass es das Problem für alle Instanzen (wie die Application.Match-Funktion) vollständig lösen wird, aber es wird sich um alle if a=b-Anweisungen kümmern. Wie für Application.Match - möchten Sie möglicherweise die Argumente in Groß- oder Kleinschreibung mit der LCase Funktion konvertieren.

+0

Als eine Warnung, das hat nicht funktioniert für mich, wenn Sie versuchen zu sehen, ob zwei Zeichenfolgen identisch waren. Ich bekomme den Sinn aus diesem Artikel, dass dies besser für weniger als oder größer als Vergleiche von Text funktioniert: http://msdn.microsoft.com/en-us/library/8t3khw5f.aspx. Ich arbeite mit Salesforce-IDs, bei denen die Groß-/Kleinschreibung beachtet wird, und selbst mit dem Option Compare Text-Set hat VBA i3vz immer noch als i3vZ erkannt. – rryanp

+2

@rryanp 'Option Compare Text' ist _supposed_, um Case ** unempfindlich zu sein ** - also was Sie gesehen haben, ist was Sie erwarten würden.Wenn du willst, dass es ** sensitive ** ist (also dass "i3vz" <> "i3vZ" 'kannst du' Option Compare Binary' stattdessen verwenden. – Floris

+1

Ah, ich sehe jetzt, dass ich seinen Beitrag rückwärts gelesen habe. Ich werde versuchen, Option Compare Binary - vielen Dank für die Info! – rryanp

12

Sie können beide Werte in Kleinbuchstaben umwandeln und vergleichen. Hier

ein Beispiel:

If LCase(Range("J6").Value) = LCase("Tawi") Then 
    Range("J6").Value = "Tawi-Tawi" 
End If 
3

Wenn die zu vergleichende Liste groß ist (dh der Bereich manilaListRange im obigen Beispiel), ist es ein kluger Schachzug, die Match-Funktion zu verwenden. Es vermeidet die Verwendung einer Schleife, die den Vorgang verlangsamen könnte. Wenn Sie sicherstellen können, dass die ManilaListRange alles Groß- oder Kleinbuchstaben ist, dann scheint dies die beste Option für mich zu sein. Es ist schnell möglich, UCase oder LCase zu verwenden, wenn Sie Ihr Match durchführen.

Wenn Sie keine Kontrolle über die ManilaListRange haben dann könnten Sie in diesem Fall gibt es viele Möglichkeiten vergleichen ‚suchen‘, ‚Instr‘, ‚ersetzen‘ usw.