2012-06-19 12 views
50

Duplicar posible:
How to search for string in MS Access VBA array¿Cómo encontrar si una matriz contiene una cadena

Actualmente estoy trabajando en una macro de Excel, y no pude encontrar una manera de hacer como if array.contains(mystring)

Escribí lo siguiente, y me da el mensaje "Invaild Qualifier" y resalta el Mainfram justo después de 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 selección es una columna

Alguien puede ayudar?

Hola, JP He intentado su sugerencia, y decía Objeto requerido. Y Highlightd la Si IsInArray (cell.Text, Mainfram) Entonces Heres mi código 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 

No importa, me encontré con que estúpido error ... Gracias de todos modos

+0

Para su información, esto se ha preguntado y respondido [aquí] (http://stackoverflow.com/q/10951687/190829). – JimmyPena

+1

@JP .: Sí, entonces cerremos esto como un duplicado exacto. –

+0

@ Jean-FrançoisCorbett marcó – JimmyPena

Respuesta

118

Utilizando el código de my answer a una pregunta muy similar:

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

Recuerdo eso. Lo voté y estoy votin por esto :). –

+1

+ 1 Agradable como siempre :) –

+0

He votado a favor de tu respuesta anterior y he votado para cerrar esta pregunta, ya que es un duplicado exacto, ¡y esta es la respuesta! –

1

I' Me temo que no creo que haya un atajo para hacer esto, ¡si alguien escribiera un contenedor linq para VB6!

Puede escribir una función que lo hace al recorrer el conjunto y verificar cada entrada. No creo que vaya a ser más limpio que eso.

Hay un artículo de ejemplo que proporciona algunos detalles aquí: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6

5
+6

Buena respuesta. ¡Un ejemplo de código lo haría aún mejor! –

+0

[Son respuestas que solo contienen enlaces realmente "buenas respuestas"?] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers) La opinión de la mayoría parece ser "no". –

+1

Entonces, si copio/pegué el ejemplo del enlace mi respuesta hubiera sido mejor?El enlace contiene un ejemplo exacto que OP podría usar textualmente en su código para lograr su objetivo. – EkoostikMartin

15

Otro forma simple usando JOIN y 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 
+0

Sí, pero esto puede fallar si la cadena buscada contiene el carácter utilizado como delimitador arbitrario ('#' o lo que se elija). –

+1

Hmm, ¿Tal vez me falta algo? ¿Puedes darme un ejemplo? –

+0

'pera # naranja' será un falso positivo. Incidentalmente, 'apple' arrojará un falso negativo con tu código actual ... pero puedes resolverlo anteponiendo la cadena buscada con tu delimitador:' strg = "#" & strg'. –

Cuestiones relacionadas