Come trovare se una matrice contiene una stringa

Possibile duplicato:
Come cercare una stringa nell’array VBA di MS Access

Attualmente sto lavorando su una macro di Excel, e non sono riuscito a trovare un modo per fare come if array.contains(mystring)

Ho scritto quanto segue, e mi dà il messaggio “Invaild Qualifier” e evidenzia il Mainfram subito dopo If

 Dim Mainfram(4) As String Mainfram(0) = "apple" Mainfram(1) = "pear" Mainfram(2) = "orange" Mainfram(3) = "fruit" For Each cel In Selection If Mainfram.Contains(cel.Text) Then Row(cel.Row).Style = "Accent1" End If Next cel 

La selezione è una colonna

Qualcuno aiuto?

Ciao, JP Ho provato il tuo suggerimento, e ha detto Oggetto richiesto. E Evidenziare If IsInArray (cell.Text, Mainfram) Quindi ecco il mio codice completo

 Sub changeRowColor() Columns("B:B").Select Dim cel As Excel.Range Dim Mainfram(4) As String Mainfram(0) = "apple" Mainfram(1) = "pear" Mainfram(2) = "orange" Mainfram(3) = "Banana" For Each cel In Selection If IsInArray(cell.Value, Mainfram) Then Rows(cel.Row).Style = "Accent1" End If Next cel End Sub Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

Non importa, ho trovato quello stupido errore … Grazie comunque

Usando il codice dalla mia risposta ad una domanda molto simile:

 Sub DoSomething() Dim Mainfram(4) As String Dim cell As Excel.Range Mainfram(0) = "apple" Mainfram(1) = "pear" Mainfram(2) = "orange" Mainfram(3) = "fruit" For Each cell In Selection If IsInArray(cell.Value, MainFram) Then Row(cell.Row).Style = "Accent1" End If Next cell End Sub Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

Un altro modo semplice usando JOIN e INSTR

 Sub Sample() Dim Mainfram(4) As String, strg As String Dim cel As Range Dim Delim As String Delim = "#" Mainfram(0) = "apple" Mainfram(1) = "pear" Mainfram(2) = "orange" Mainfram(3) = "fruit" strg = Join(Mainfram, Delim) strg = Delim & strg For Each cel In Selection If InStr(1, strg, Delim & cel.Value & Delim, vbTextCompare) Then _ Rows(cel.Row).Style = "Accent1" Next cel End Sub 

Temo di non pensare che ci sia una scorciatoia per farlo – se solo qualcuno scrivesse un wrapper linq per VB6!

Potresti scrivere una funzione che esegue il ciclo attraverso la matrice e controllando ogni voce – non penso che diventerai più pulito di così.

C’è un articolo di esempio che fornisce alcuni dettagli qui: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6