2012-06-19 4 views
50

Можно создать дубликат:
How to search for string in MS Access VBA arrayКак найти, если массив содержит строку

В настоящее время я работаю над макро Excel, и я не мог найти способ сделать как if array.contains(mystring)

Я написал следующее, и он дает мне сообщение «Invaild Qualifier» и выделяет Mainfram сразу после 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 

Выбор столбец

кто-нибудь помочь?

Hi, JP Я попробовал ваше предложение, и он сказал, что требуется объект. И Highlightd Если IsInArray (cell.Text, Mainfram) Тогда Heres мой полный код

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 

Nevermind, я обнаружил, что глупая ошибка ... Спасибо в любом случае

+0

FYI, об этом спрашивали и отвечали [здесь] (http://stackoverflow.com/q/10951687/190829). – JimmyPena

+1

@JP .: Да, тогда давайте закроем это как точный дубликат. –

+0

@ Jean-FrançoisCorbett отмечен – JimmyPena

ответ

118

Используя код от my answer к очень похожий вопрос:

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

Я помню этот. Я проголосовал за это, и я голосую за это :). –

+1

+ 1 Ницца как обычно :) –

+0

Я возвращаю свой старый ответ и голосую, чтобы закрыть этот вопрос, поскольку он является точным дубликатом, и вот этот ответ! –

1

Я Я боюсь, что не думаю, что есть ярлык для этого - если бы кто-то написал linq-упаковку для VB6!

Вы можете написать функцию, которая делает это, перейдя через массив и проверив каждую запись - я не думаю, что вы получите чище, чем это.

Там пример статья, которая предусматривает некоторые подробности здесь: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6

5

Используйте метод Filter() - http://msdn.microsoft.com/en-us/library/aa164525(v=office.10).aspx

+6

Хороший ответ. Пример кода еще лучше! –

+0

[Ответы что просто содержат ссылки действительно «хорошие ответы»?] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers). По мнению большинства, чтобы быть «нет». –

+1

Итак, если я копирую/вставлял пример из ссылки, мой ответ был бы лучше?Ссылка содержит точный пример, который OP мог бы использовать дословно в своем коде для достижения своей цели. – EkoostikMartin

15

Другой простой способ с использованием JOIN и 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

Да, но это может потенциально потерпеть неудачу, если искомая строка содержит символ, используемый как ваш произвольный разделитель ('#' или любой другой). –

+1

Хм, Может, я что-то упустил? Можете ли вы привести мне пример? –

+0

'Груша # оранжевый' будет ложным положительным. Кстати, 'apple' вернет ложный минус с вашим текущим кодом ... но вы можете решить это, добавив искомую строку с вашим разделителем:' strg = "#" & strg'. –

Смежные вопросы