web-dev-qa-db-fra.com

Comment savoir si un tableau contient une chaîne

Duplicate possible:
Comment rechercher une chaîne dans un tableau MS Access VBA

Je travaille actuellement sur une macro Excel et je ne pouvais pas trouver un moyen de faire comme if array.contains(mystring)

J'ai écrit ce qui suit, et cela me donne le message "Invaild Qualifier" et met en évidence la Mainfram juste après 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 sélection est une colonne

Quelqu'un aide?

Bonjour, JP J'ai essayé votre suggestion et il est dit que l'objet est requis. Et surligné le Si IsInArray (cell.Text, Mainfram) Alors Voici mon code complet

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

Tant pis, j'ai trouvé cette stupide erreur ... Merci quand même

53
Nicola-V

En utilisant le code de ma réponse à une question très similaire:

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
128
JimmyPena

Un autre moyen simple en utilisant JOIN et 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
17
Siddharth Rout
4
EkoostikMartin

Je crains que je ne pense pas qu'il existe un raccourci pour le faire - si seulement quelqu'un écrivait un wrapper linq pour VB6!

Vous pouvez écrire une fonction qui le fait en parcourant le tableau et en vérifiant chaque entrée. Je ne pense pas que vous obtiendrez plus propre.

Un exemple d'article fournit des détails ici: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6

1
Jon Egerton