2013-06-11 10 views
18

Sto lavorando a un programma VBA che consentirebbe all'utente di digitare un indirizzo e trovare la posizione abbinando gli elementi dell'indirizzo con un database.In VBA si elimina la sensibilità del case quando si confrontano le parole?

Sfortunatamente, sto avendo un problema ricorrente con la distinzione tra maiuscole e minuscole.

Per esempio, quando io sto usando questo codice:

For i = 11 To lRowB 
Range("B" & i).Activate 
myResult = IsNumeric(Application.Match(ActiveCell.Value, manilaListRange, 0)) 

Si sta andando confrontare il valore della cella attiva a un elenco di parole dalla mia base di dati. Il problema è che, se nella mia cella attiva la parola è "Miami" o "MIAMI" e solo "Miami" è nel database, non funzionerà ...

Altro esempio:

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

Lo stesso problema, solo la parola scritta con lo stesso caso funzionerà.

Come posso sbarazzarmi di questo? È particolarmente fastidioso e non riesco a riscrivere il mio database in ogni combinazione possibile!

Grazie in anticipo!

+1

applicazione .match è _non_ case-sensitive quindi penso che tu abbia un altro problema – JosieP

risposta

38

C'è una dichiarazione si può rilasciare a livello di modulo:

Option Compare Text 

Questo rende tutti i "confronti di testo" case insensitive. Questo significa che il codice seguente mostrerà il messaggio "questo è vero":

Option Compare Text 

Sub testCase() 
    If "UPPERcase" = "upperCASE" Then 
    MsgBox "this is true: option Compare Text has been set!" 
    End If 
End Sub 

Vedi per esempio http://www.ozgrid.com/VBA/vba-case-sensitive.htm. Non sono sicuro che risolverà completamente il problema per tutte le istanze (come la funzione Application.Match) ma si prenderà cura di tutte le istruzioni if a=b. Per quanto riguarda Application.Match, è possibile convertire gli argomenti in maiuscolo o minuscolo utilizzando la funzione LCase.

+0

Come avvertimento, questo non ha funzionato per me quando ho provato a vedere se due stringhe erano identiche. Ho capito da questo articolo che questo funziona meglio per meno di o maggiore rispetto ai confronti del testo: http://msdn.microsoft.com/en-us/library/8t3khw5f.aspx. Sto lavorando con gli ID di Salesforce che sono sensibili al maiuscolo/minuscolo e, anche con il set di testo Confronta opzioni, VBA ha ancora trovato i3vz uguale a i3vZ. – rryanp

+2

@rryanp 'Option Compare Text' è _supposed_ per essere case ** insensitive ** - quindi quello che hai visto è quello che ti aspetteresti.Se vuoi che sia ** sensitive ** (in modo che '" i3vz "<>" i3vZ "' puoi usare 'Option Compare Binary' invece. – Floris

+1

Ah, ora vedo che stavo leggendo il suo post all'indietro. Vado a provare Option Compare Binary: grazie mille per le informazioni! – rryanp

12

È possibile convertire entrambi i valori in lettere minuscole e confrontare.

Ecco un esempio:

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

Se l'elenco da confrontare è grande, (ovvero la gamma manilaListRange nell'esempio sopra), è una mossa intelligente utilizzare la funzione di corrispondenza. Evita l'uso di un ciclo che potrebbe rallentare la procedura. Se puoi assicurarti che manilaListRange sia tutto maiuscolo o minuscolo allora questa sembra essere l'opzione migliore per me. È rapido applicare "UCase" o "LCase" mentre fai la tua partita.

Se non avere il controllo del ManilaListRange allora potrebbe essere necessario ricorrere a loop attraverso questa gamma, nel qual caso ci sono molti modi per confrontare 'Cerca', 'Instr', 'sostituire' ecc

Problemi correlati